Transcription
1. Intro: Bienvenue sur le cours NodeJS web API. Dans ce cours, vous apprendrez en faisant. Nous mettrons en face de vous l'expérience la plus pratique dont vous avez besoin pour construire des API Web. Parce que de nos jours, si vous voulez acquérir une expérience, vous devez le faire non seulement en lisant une documentation ou en suivant un cours théorique. C' est pourquoi nous construisons ce cours, qui sera l'API Web e-Sharp. Nous couvrirons toutes les informations nécessaires à la création d'une API de boutique en ligne. Api signifie l'interface de programmation d'application, ou en d'autres termes, l'interface qui apportera pour moi que, euh, de la base de données à l'interface utilisateur. Et il sera situé dans un serveur web où notre application NodeJS sera hébergée. Chaque API est sécurisée. Nous allons donc apprendre dans ce cours comment s'authentifier auprès de ces API et les sécuriser. Nous créerons toutes les API qui sont nécessaires pour l'e-shop, comme le produit et les catégories et les
utilisateurs et les connexions, l'authentification et l'enregistrement des utilisateurs. Et bien sûr, les commandes que les utilisateurs vont passer, nous n'oublierons pas aussi le téléchargement de fichiers et les téléchargements de fichiers multiples. Parce que nous en aurons besoin pour nos images de produits et notre galerie de produits, nous utiliserons le meilleur outil pour construire notre API. Et en tant que développeur back-end, vous verrez comment tester vos API car certains outils peuvent nous fournir toutes les fonctionnalités sans dépendre du frontal et attendre que cela soit fait. Nous utiliserons également les bons éditeurs et les meilleures extensions pour accélérer notre productivité. Et non seulement cela, vous verrez aussi comment ce cours est interactif. Nous vous demanderons donc de résoudre une tâche et nous les examinerons pour vous. J' espère que vous apprécierez ce cours et j'ai hâte
de travailler ensemble pour construire la meilleure API pour un e-shop.
2. Aperçu à notre API RESTful: Jetons un coup d'oeil à notre API RESTful pour voir comment échanger des données entre le client et le serveur. Quelle est l'architecture de l'API RESTful ? Nous avons le client et nous avons un serveur, et ils échangent des données via le protocole HTTP. C' est le concept de base de l'API RESTful. Il existe également des opérations pour créer des données, lire des données, mettre à jour des données et les supprimer. Ses opérations peuvent être effectuées via le protocole HTTP. Il existe des méthodes spécifiques de protocole HTTP qui font ces opérations, nous appelons des opérations au début, quelle est la différence entre l'API RESTful et la route frontale ? L' API RESTful apporte des données. La sécheresse frontale affiche les données ou le rendu d'une page spécifique. Lorsque vous ouvrez votre navigateur et mettez le lien API RESTful, si vous avez accès à ces données, alors vous obtiendrez une chaîne qui se compose de fichier JSON ou XML. protocole Http est capable de rendre une page avec HTML CSS et d'apporter vos données. Donc, les méthodes HTTP en général, ils sont GET, post, PUT et delete, qui sont les opérations brutes. Mais dans les méthodes HTTP, ils sont appelés comme ceci. J' envoie donc une demande à la base de données ou
au back-end en général pour passer par l'API de repos certaines données. Par exemple, obtenir une liste de produits via l'API, cela me donnera tableau de liste de produits. Obtenir un seul produit, en contournant l'ID de ce produit, il me donnera le fichier JSON avec tous les détails du produit. Lorsque je veux mettre à jour un produit, j'envoie une requête PUT avec l'idée pour le produit et je joins également les nouvelles données. Et la réponse sera le même produit, mais avec des données différentes. Et la suppression d'un produit passe simplement l'ID du produit avec la demande de suppression. Création d'un produit, besoin de publier un nouveau produit. Donc, j'utilise la route principale de l'API des produits et ensuite je transmets toutes les nouvelles données, les données qui, par exemple, nom de votre produit et l'image, et c'est des étangs, seront un nouvel identifiant avec le nouveau nom du produit et bien sûr, l'image. Ce sont nos demandes d'API pour obtenir les données ou publier, supprimer ou mettre à jour des données sur le serveur. Et j'utilise api slash v1, ce qui signifie la version un. Ainsi, lorsque vous souhaitez mettre à jour votre API à l'avenir, vous ajoutez une nouvelle version. Ainsi, les utilisateurs sont toujours en mesure d'utiliser les anciennes versions de votre API. La même chose pour les commandes et les utilisateurs. Donc, dans ce cas, vous avez tous la même séquence, mais vous avez juste besoin de planifier vos données, non ? Créer un serveur web avec NodeJS est très simple. Voyons ça dans la prochaine conférence.
3. Installation de nodejs: Pour commencer le développement, nous avons toujours besoin de la gestion des paquets. La gestion des paquets est fournie avec l'application NodeJS. Donc, pour l'installer joue juste dans Google NodeJS et aller à Télécharger. Et vous verrez le téléchargement pour tous les systèmes d'exploitation. Par exemple, j'ai ici pour Windows et aussi pour Mac OS. Il existe deux types comme LTS, qui est recommandé pour la plupart des utilisateurs, et le courant, qui est les dernières fonctionnalités. Mieux vaut obtenir toujours une version stable, ce qui est recommandé pour la plupart des utilisateurs. Ici, vous pouvez choisir votre installation en fonction de votre système d'exploitation. Et ce sera simplement une application, comme toute application que vous pouvez installer. Donc, après cela, vous pouvez télécharger cette application et l'exécuter. Et ce sera comme n'importe quelle installation d'application normale. Donc, pour être sûr, après cela, vous terminez toutes ces étapes. Vous devez exécuter des commentaires MPM. Donc, pour exécuter des commandes mpm, nous pouvons utiliser Visual Studio Code. Après avoir ouvert le code Visual Studio, vous verrez ici les derniers projets que vous avez. Mais par exemple, nous devons ouvrir le terminal du code Visual Studio. J' irai dire Control et J.
et ensuite j'ouvrirai le terminal. Et dans le terminal, nous pouvons, par
exemple, placer un commentaire NodeJS. Donc, nous pouvons dire, par exemple, la version NPM. Et nous obtiendrions le détail complet vierge sur le Node.js installé. Après cela, nous serons en mesure d'utiliser la gestion des paquets NodeJS, où il existe de nombreuses bibliothèques que nous pouvons utiliser dans notre application et nos développements.
4. Installation de postman: Lorsque nous créons des API, nous devons les tester. Vous pouvez tester vos API avec une application frontale comme React ou Angular ou Vue js. Mais nous allons dans ce cours pour commencer par le backend en premier. Donc, la meilleure façon de le faire et de tester les API est d'installer un outil appelé Postman. Allons à Google. Vous allez au téléchargement Postman. Et ici, vous trouverez en fonction de votre système d'exploitation. Donc, ici, vous allez choisir télécharger l'application. Et une fois qu'il est téléchargé, ce sera une configuration normale comme n'importe quelle application. Après avoir ouvert le fichier téléchargé, vous recevrez une notification si vous utilisez Mac OS. Et il vous demandera de déplacer cette application vers le dossier de l'application. Et après cela, vous verrez que cette application se trouve dans votre dossier d'application. La même chose pour Windows. Il est normal d'installer comme n'importe quelle petite application. Après avoir ouvert l'application, vous pourrez tester les API. Essayons un. Lorsque vous allez à Google et tapez l'espace réservé JSON, vous verrez que le premier lien est de fausses API. Ainsi, vous pouvez tester une requête GET ou des demandes de poste. Alors essayons celui-là. C' est écrit ici. En tant que requête GET, je vais au Postman, puis j'ouvre un nouvel onglet avec la requête GET et place le lien que j'ai copié à partir de l'espace réservé JSON et appuyez sur Envoyer, j'obtiendrai une réponse. Cette réponse vient sous la forme d'un JSON. Et de la même manière, nous allons construire nos API.
5. Configurer l'atlas MongoDB: Pour notre e-shop, nous avons besoin d'une base de données. Et la base de données, nous n'avons pas besoin d'installer de logiciel. Nous allons utiliser MongoDB, Atlas. Mongodb offre maintenant un stockage de base de données en ligne, ce qui signifie que la base de données est déjà dans le Cloud. Ce que nous devons faire juste pour aller à l'URL que j'ai jointe à cette conférence et créer un compte ici et inscrivez-vous et ensuite regarder votre compte. Après la connexion, vous verrez cet écran que vous avez besoin pour créer un projet. Donc, tout d'abord, vous devez créer un projet pour notre e-shop. Alors vous allez ici et dites, je veux un projet qui est, par
exemple, chaque hub. Et je clique sur Suivant. Et puis créer le projet. Après cela, le projet nécessite un cluster. Nous devons donc construire un cluster où nous offrons notre base de données. Donc ici, il y a des clusters partagés, ce qui est gratuit. Vous pouvez l'utiliser et choisir le serveur le plus proche de votre pays. Par exemple, je vais utiliser celui-ci, celui par défaut. Ensuite, après avoir créé le cluster, nous sommes prêts à créer notre base de données. La base de données dans MongoDB appelée collection. Vous devez donc aller dans les collections et en créer une nouvelle en fonction de vos besoins. Nous en avons déjà un que nous avons créé pour le cours dans le projet 0. Ici, il y a des collections à j'ai créé plusieurs bases de données. Donc, votre part est juste de créer un compte et de créer un cluster et de créer votre propre collection, que nous allons utiliser dans le cours. Nous verrons plus tard comment faire la connexion entre notre code back-end et le MongoDB dans le Cloud.
6. Préparer le serveur API: Maintenant, les choses commencent à être difficiles. Non, non, je donne juste. Dans ce module, nous allons voir comment travailler avec le produit lui-même et ses catégories, bien
sûr, dans la partie back-end. Donc, les principales étapes pour créer notre produit maintenant, pour importer toutes les données du produit à l'extrémité frontale. Qu' est-ce que cela signifie que nous voulons créer une API pour récupérer toutes les données de produit à notre front end. Donc, nous avions besoin d'une manière ou d'une autre en tant que JSON, cela inclut également la création du produit et le mettre à jour et le supprimer. Nous allons donc d'abord créer les schémas de produits et de
catégories dans la base de données au niveau de l'application. En outre, nous allons commencer aussi simple que possible. Donc, les catégories sont la chose la plus facile que nous puissions faire maintenant. Donc, nous allons faire le reste de l'API pour les catégories. Et nous continuerons à publier un nouveau produit dans la base de données via l'API restante. Et puis nous obtiendrons la liste des produits. Et après cela, nous obtiendrons un détail de produit par ID. Et puis nous verrons comment connecter les produits avec la catégorie. Par exemple, lorsque je reçois un produit, je vais voir comment obtenir les détails de la catégorie à l'intérieur du produit. Après cela, nous devons mettre à jour notre produit. Donc, parfois, nous avons besoin de mettre à jour le prix, ou nous voulons mettre à jour leur image, ou nous voulons mettre à jour le nom du produit. Suppression d'un produit. Parfois, lorsque je n'ai pas le produit, je l'ai supprimé de mon magasin. Ensuite, nous voulons faire quelques statistiques comme obtenir le nombre de produits, quantité de produits que j'ai dans mon magasin. Par exemple, je veux voir uniquement les produits en vedette. Parce que si vous vous souvenez, nous avons est drapeau en vedette. Nous vous savons, quels produits sont présentés afin que nous puissions les
prendre et les afficher sur la page d'accueil seulement. Et puis il est très important que nous ayons un filtrage. Nous devons donc filtrer leurs produits en fonction des catégories. Donc, je ne vais pas seulement par exemple, quelque chose pour la santé. Donc, je reçois les produits qui sont là catégories est la santé. C' est tout pour l'instant. J' espère que vous apprécierez ce module. Ce sera un peu détaillé, mais après cela, vous serez en mesure de créer les commandes et les utilisateurs, comme nous le voyons dans les prochains modules.
7. Créer le serveur de backend avec Express: Commençons à créer notre serveur principal, ou disons notre serveur Web, où nous appellerons nos API au client. Après avoir ouvert notre code Visual Studio dans le dossier backend du dossier, comme nous l'avons structuré auparavant, nous exécutons une commande npm init dans MPM, il nous demandera un nom de paquet. J' ai mis un e-shop, une vierge. J' appuie sur Entrée description, disons quelques backend pour l'e-shop par exemple. Et puis le point d'entrée comme où l'application va commencer, je mets app.js et puis certains, un autre commentaire. Nous continuons à appuyer sur Entrée et puis il nous demandera que tout va bien. Nous appuyons sur Entrée. Ensuite, nous verrons un paquet Jason est créé. Donc, créons maintenant notre fichier jusqu'à js, où nous allons commencer notre point d'entrée de notre application. Donc, je vais mettre ici, par
exemple, console.log, Bonjour monde. Et puis il imprimera Hello World quand je suis en cours d'exécution de cette application. Mais comment nous allons exécuter cette application, je conseille d'utiliser une bibliothèque appelée NADH Monde, qui est un utilitaire qui surveillera tous les changements de notre code source lorsque nous appuyons sur Control S ou enregistrer cette application JS, il redémarrez l'application automatiquement. Donc, après avoir installé cette bibliothèque, nous voyons qu'elle est en indépendance dans un paquet JSON en tant que script personnalisé, nous pouvons l'ajouter ici, comme c'est un commentaire pour démarrer l'application en utilisant le moniteur de nœud. Donc, je peux dire démarrer le moniteur de noeud ou le noeud gémit. App point JS. Dans ce cas, je vais faire démarrer l'application avec le fichier de point d'entrée app.js. Essayons maintenant. Sauvegardons ab.js, puis écrivons npm start. Et après avoir commencé l'application, je verrai Hello World. Et l'application est toujours en cours d'exécution. Donc, il détecte tout changement que je fais dans l'application. Alors je dis Helloworld avec le changement était point d'exclamation, et je vois qu'il a changé. Changeons le monde e-Sharp. Nous verrons bonjour e-shop. C' est génial. Donc, jusqu'à maintenant, nous n'avons qu'une application en cours d'exécution, mais nous n'avons pas encore de serveur. Donc, pour créer un serveur Web, installons Express, qui est une bibliothèque célèbre de Node.JS pour héberger un serveur. Donc, après avoir fait cette installation, je le verrai aussi dans les dépendances. Mais supprimons ce journal de console et il crée une constante, appelez-le express et appelez la bibliothèque express en utilisant le mot-clé require express. Il l'appellera automatiquement à partir des modules de noeud. Et créons une constante qui s'appelle application. Et cette application avec appel d'une fonction appelée Express, que nous avons mentionné ou défini précédemment. Ce serveur Web nécessite l'écoute d'un port spécifique. Alors je dis que l'écoute. Et je spécifie, par exemple, 3 mille comme un port. Et il y a un rappel. Rallback nous donnera, nous serons tous exécutés quand il y aura la création réussie du serveur. Donc, dans le rappel, je peux imprimer n'importe quel message dans la console. Par exemple, je dirai que le serveur est démarré maintenant ou que le serveur est en cours d'exécution maintenant sur l'hôte local de liaison avec le port 3000. Alors maintenant, exécutons à nouveau l'application. Je dirai npm commencer. Et nous aurons une erreur parce que je suis déjà en cours d'exécution du serveur. Alors commençons et je le relance. Je vais voir l'hôte local ou le serveur est en cours d'exécution sur localhost 3000. Lorsque j'ouvre le navigateur et visite cette URL, localhost 3000, voyons ce que nous aurons. Je l'ai mis ici et je vois que venir, obtenir, ne peut pas obtenir parce que je n'ai pas spécifié de route initiale pour l'application. Nous créons. Maintenant, la route initiale ou la racine, nous pouvons dire point d'application obtenir. Nous verrons qu'Express nous fournit toutes les requêtes HTTP. Par exemple, PUT, supprimer, et aussi publier. Alors oublie. Il acceptera deux paramètres. Le premier est la route elle-même. Par exemple, je dirai la route initiale ou la racine. Donc, dans ce cas, je vais demander un rappel. Le rappel aura la réponse que j'
enverrai au client quand il appellera cette route. Donc, je dis dans la réponse de rappel, sable de
point, par exemple, disons un message, nous pouvons l'appeler bonjour ou API, pas Hello World. Donc maintenant, nous avons cette API. Sauvegardons, et maintenant nous pouvons exécuter l'application à nouveau sur le navigateur. L' application appellera une getMethod et nous obtiendrons en réponse, cette API hello. Donc, comme un résumé, nous avons vu comment nous avons créé notre propre serveur ou serveur web avec express. Et nous regardions nos changements avec le moniteur de noeud et comment nous appelons cette application arriver à initialiser une route. Et nous exécutons le serveur sous un port spécifique que nous avons vu auparavant. Nous devons avoir une API et une version dans l'URL de cette sortie. Voyons donc comment nous pouvons créer cela avec des variables d'environnement dans la prochaine conférence.
8. Répondre des variables d'environnement: Ok, donc commençons par les variables d'environnement. variables d'environnement sont normalement utilisées comme variable publique, qui sont utilisées dans l'application. Donc, par exemple, je veux une variable publique pour l'URL de l'API. Donc, cette URL API, qui sera préfixée pour chaque route que j'utilise pour mon application ou pour mon API. Donc, comme nous l'avons vu avant que chaque API que nous avions, il est préfixé avec quelque chose comme slash, api slash version un. Et cela signifie que chaque API de mon application aura cette URL. Et puis la version d'API 1. Et puis je dis, par exemple, les produits. Et puis je peux poster, supprimer ou créer des données dans cette API. Alors maintenant, voyons comment nous pouvons lire ce préfixe. Donc, je ne veux pas répéter dans mon API est toujours la chaîne. Donc, je peux le réparer dans une constante qui est lisible de partout. Et puis je peux le passer au micro, à mes routes de cordes, et ensuite il serait lisible dans cette route. Donc, pour ce faire, d'abord, normalement, dans pas le Node.JS, nous avons
normalement une variable d'environnement appelée dot n ou fichier d'environnement. Et quel exemple je passe un nom de variable que je le veux, n' importe quel nom que vous pouvez, par
exemple, URL d'API. Et puis je peux dire la chaîne que je veux passer, qui est api slash v1. Et dans ce cas, j'aurai cette URL API est définie partout dans l'application. Mais d'abord, comment nous pouvons lire cette variable de ce fichier dans notre application, il y a une bibliothèque, nous pouvons l'installer à partir de paquets MPM. Et ça s'appelle « point EMF ». Donc, nous ne pouvons pas dire npm install dot EMF. Et cette bibliothèque est normalement disponible toujours. Et nous pouvons l'utiliser dans l'application JS dans la route à la racine, Pas de problème. Donc, nous pouvons dire définir ou nous pouvons dire exiger cette bibliothèque. EMF ne slash pas les conflits. Et normalement cela devrait être dans une chaîne. Donc, quand je dis exiger cette bibliothèque, alors je serai en mesure d'utiliser une constante spécifique pour obtenir ces valeurs du fichier M. Donc, je vais aller ici et définir une constante. Appelons-le par exemple, API. Et puis nous pouvons dire point de processus, point, puis le nom de la variable que j'ai créée ici. Donc, je peux dire API sur l'URL de partition. Alors sauvegardons tout. Et maintenant, essayons d'imprimer cette variable pour voir si elle lit vraiment à partir de ce fichier ou non. Alors faisons-le au début quand nous avons démarré le serveur. Donc, je vais dire console.log, l'API pour constante. Alors je vais démarrer mon serveur, mpm start. Et voici, nous avons déjà défini. Donc, dans chaque route que j'ai, je peux définir ou passer cette variable API plus la route que je veux, par exemple, des produits. Donc, dans ce cas, j'aurai la version de l'API préfixée un plus des produits. Nous verrons cela plus en détail dans les prochaines conférences pour
voir comment créer l'itinéraire et comment le construire et comment l'appeler. chose la plus importante que vous devez savoir maintenant que nous pouvons créer les variables publiques dans ce fichier et les lire n'importe où dans l'application. Donc, dans ce cas, je veux stocker, par
exemple, la chaîne de base de données ou la chaîne de connexion. Je peux le stocker ici dans ce fichier et aussi, par exemple, un secret pour l'authentification, je peux également le stocker ici. Et quand je veux déployer l'application sur le serveur de production, je vais changer ces variables. Donc, nous aurons aussi un autre fichier, par
exemple point EMF, mais pour le serveur de production, nous verrons cela bien sûr dans la conférence où nous allons déployer l'application Node.JS. Maintenant passons à la prochaine conférence où nous allons créer la véritable API et comment nous allons envoyer des données JSON à travers elle parce que nous avons besoin de données JSON pour notre e-shop pour échanger avec le front end les informations sur les produits et la commande et cetera.
9. Créer une première adresse d'appel et d'analyse des données Json: Maintenant, nous allons voir comment échanger des données entre front-end et back-end. Nous avons vu précédemment comment échanger des données avec le front end avec la requête GET. Donc, nous envoyons Bonjour API. Mais ce que nous avons fait est seulement d'échanger une chaîne, ce qui est l'API Bonjour. Nous devons donc échanger des données JSON. Par exemple, le produit est un objet, se compose de l'ID, le nom, l'image et le prix. Alors maintenant, nous allons simuler l'API des produits. Donc, au début, nous allons avoir le joli préfixe comme avant. Donc, je vais utiliser les ticks arrière, qui sont très utiles pour combiner entre les constantes et les chaînes sans utiliser ce plus. Alors maintenant, supprimons cette partie et créons un backticks. Et avec un signe dollar et des crochets incurvés. Je vais faire de l'API. Et puis disons les produits. Retirons cette partie d'ici. Et aussi celle-là. Et je vais créer une constante. Disons produit. Et ce produit est objet, contient ID, disons un, et le nom, disons cheveux, commode. Et l'image avec, par exemple, une URL. Vous avez donc la possibilité ici de sélectionner des devis doubles ou un devis unique. Mais avec JavaScript, Il est préférable d'utiliser toujours des guillemets simples dans cette réponse. Envoyez-nous ce produit à l'avant. Et nous allons exécuter l'application. Maintenant, nous avons l'application en cours d'exécution. Allons voir Facteur. Postman est une application comme nous l'avons déjà parlé et nous avons vu comment l'installer. Donc, je ne peux pas appeler les API comme avec les méthodes GET, post, PUT, etc. Donc, avons ici notre API 3000, puis api slash version un produit slash. Et je clique sur Envoyer. Alors c'est pons est l'objet que j'ai déjà créé. Donc, nous supposons que nous construisons cet objet en obtenant les données du produit dans la base de données ou à partir de la base de données, puis les envoyons à l'extrémité frontale avec une getMethod. Alors que faire si l'utilisateur ou l'administrateur de l'application du problème vers le haut, nous allons envoyer, ou, par exemple, créer un nouveau produit. Donc, le nouveau produit a besoin d'une donnée qui sera envoyée à partir de l'extrémité frontale. Alors maintenant, changeons cette méthode musculaire de se rendre à la poste. Quel exemple je vais le copier et dire post. Les demandes de poste ont également besoin de données. Ces données proviendront de l'extrémité frontale. Donc, comment j'obtiens ces données à partir de l'extrémité frontale, c'est très simple en utilisant le corps de point de requête. Donc, après avoir posté les données du corps, je vais les renvoyer au front. Alors créons une constante, disons un nouveau produit. Et ce nouveau produit sera le corps de point de demande. Alors faisons-le comme ça. Console. Consigner le nouveau produit. Alors on va chez Facteur. Facteur nous changeons cette méthode de get to post. Et le corps de la requête sera, par
exemple, à la ligne JSON, qui est JSON. Et puis je peux passer, par
exemple, cet objet. Et quand je clique sur Envoyer, nous voyons que nous en retournons un. Et dans le journal de la console, j'ai été indéfini. Donc, le problème est que le corps n'est pas bien analysé. Donc nous avons besoin de quelque chose appelé un middleware. Le middleware est une fonction qui a le contrôle de la requête et la réponse de n'importe quelle API. Donc, lorsque le front se termine et l'objet JSON, nous avons besoin du back-end pour comprendre que c'est adjacent. Alors s'il vous plaît l'analyser et l'utiliser dans le back-end. Donc, pour ce faire, nous avons juste besoin d'utiliser une chose d'express JS. Donc, nous devons utiliser ce JSON. Donc, l'Express acceptera les données JSON. Et la chose est très simple. Comme je vous l'ai déjà dit, nous avons besoin d'un middleware. Et ce middleware peut être fait en utilisant l'utilisation de l'application. Et puis nous disons point Express JSON. Et cette méthode, nous allons rendre nos données compréhensibles par Express, qui sont envoyés par le front end. Et nous pouvons taper ici comme middleware. Et à l'avenir, nous verrons que nous mettrons tous les middleware. Dans cette section. Auparavant, il était utilisé quelque chose appelé BodyParser, et cet analyseur de corps a été dupliqué. Donc maintenant, nous utilisons Express JSON. Donc, si vous voyez dans les prochaines conférences que nous utilisons BodyParser, remplacez-le
simplement par exprimé ou JSON. Ainsi, vous garantissez que votre application fonctionnera de la bonne manière. Donc maintenant, nous sommes en mesure de faire un get et aussi post des données. Je vais, par exemple, changer ici coiffeur et l'envoyer. Et je vais récupérer le coiffeur deux. Donc maintenant notre API est prête. Nous commençons maintenant à construire cette structure API pour les commandes de produits et 40 utilisateurs, comme nous l'avons déjà dit dans la section précédente. Dans la prochaine conférence, nous verrons comment enregistrer ces événements API. Par exemple, lorsque quelqu'un publie des données ou de bonnes données, nous les verrouillerons dans la console de notre application.
10. Enregistrer des demandes d'API: Il est très utile faute que le développeur de savoir ce qui se passe sur son serveur. Ainsi, nous pouvons connaître et enregistrer les requêtes HTTP qui viennent de l'extrémité frontale, comme les messages, obtenir ou mettre ou supprimer. Pour ce faire, il existe une très bonne bibliothèque appelée Morgan, donc nous pouvons l'utiliser pour enregistrer nos requêtes HTTP qui viennent de l'extrémité frontale. Alors installons cette bibliothèque. J' arrête le serveur, disons m, Pm installer Morgan. Et après l'installation de cette bibliothèque, nous pouvons l'appeler aussi avec require. Donc, ça coûte Morgan. Exiger. Morgan. Nous avons dit que cette bibliothèque est une bibliothèque middleware, donc nous devons la mettre dans app dot utiliser Morgan. Et il y a quelques options par défaut, qui s'appelle Tiny. Ceci est bon dans le cas où afficher les demandes de journal dans un format spécifique. Par exemple, exécutons à nouveau le serveur. Mpm commence. Donc, nous avons ici qu'un serveur est en cours d'exécution avec Postman. Faisons quelques demandes. Par exemple, je vais envoyer à nouveau le message. Ok, retour à l'application ou au code. Nous verrons que nous avons reçu une demande de poste sur l'API et avec leur numéro de statut spécifique. Faisons un GET. Aussi. Voici un get, Envoyer et revenir à l'application. Et je vois que je me suis connecté aussi, ils GET requêtes. Il existe de nombreuses options pour cette bibliothèque, sorte que vous pouvez formater vos journaux comme vous le souhaitez. Mais nous ne le ferons pas. Nous allons utiliser seulement minuscule. Et bien sûr, vous pouvez dire avec ces journaux sur certains fichiers, tout cela est, est affiché ici dans la documentation de cette bibliothèque. Maintenant, nous utilisions seulement une fausse donnée du produit. Commençons à lier ces données à la base de données. Donc, dans la prochaine conférence pour faire la connexion à la MongoDB en utilisant Atlas.
11. Créer un Mongoose: Auparavant, nous avons vu comment simuler une donnée
du produit pour les stocker et les afficher dans notre application. Maintenant, ce dont nous avons besoin est de stocker les données dans la base de données. Et dans ce cours, nous utilisons MongoDB. Et comme nous l'avons vu auparavant, nous n'avons pas besoin d'installer un logiciel spécial pour MongoDB. Nous avons juste besoin de nous connecter dans le nuage de MongoDB. Ensuite, nous créons notre base de données et connectons notre application à cette base de données dans le Cloud. Donc, tout d'abord, comment nous pouvons connecter notre application à la base de données sur le cloud. Donc, nous devons d'abord installer une bibliothèque appelée Mongoose. Mongoose est responsable de tout le fonctionnement de la base de données
MongoDB dans l'application ou une application Node.js. Alors installons cette bibliothèque qui s'appelle Mongoose. Je vais taper ici npm installer mongoose. Et comme chaque bibliothèque, nous avons besoin de créer une constante. Appelons ça la mangouste. Et ce Mongo, on peut dire qu'il faut Mongols. Nous pouvons supposer que cette chose ici est comme l'importation. Donc, nous importons chaque bibliothèque et la stockons dans une constante. Normalement, nous ajoutons la connexion à la base de données avant de démarrer le serveur. Donc ici, je vais dire Mongoose, point connecter et déconnecter. Il demande des URI. Uris/chaîne de connexion. Je peux l'obtenir de MongoDB Cloud. Nous avons vu précédemment comment se connecter au cloud de MongoDB et créer notre application et les clusters et notre projet. Et nous avons vu que nous avons plusieurs collections, ou nous pouvons dire des bases de données. Et ces bases de données, nous y aurons accès via notre application. Voyons donc comment nous pouvons nous connecter à ces bases de données dans des clusters. Si je retourne aux clusters, je vois ici un bouton qui indique Connect. Quand je dis se connecter, je peux utiliser plusieurs options de MongoDB. Par exemple, ce dont nous avons besoin est de connecter votre application. Nous devons donc utiliser une chaîne de connexion pour l'obtenir d' ici et la coller dans notre méthode de connexion avec de Mongoose. Donc, en cliquant sur cette option, nous allons obtenir une chaîne de connexion. Copions-le et mettons-le dans notre application. Donc, j'apporte des citations ici et copie cette chaîne de connexion. Mais nous ne pouvons pas voir qu'il dit que cette chaîne de connexion devrait contenir un nom d'utilisateur, un mot de passe et un nom de base de données. Mais d'où je ne peux pas obtenir cette information est simplement dans MongoDB Cloud. Nous pouvons utiliser un utilisateur spécifique pour se connecter à ces bases de données. Nous avons juste besoin d'aller à l'accès à la base de données et de créer un nouvel utilisateur. Et cet utilisateur, nous pouvons nous connecter à la base de données dans le Cloud. Donc, nous allons cliquer ici, ajouter un nouvel utilisateur de base de données. Et donnons-lui un nom d'utilisateur, E utilisateur pointu et le mot de passe, vous avez la liberté de sélectionner n'importe quel mot de passe. Par exemple, je mets de un à sept. Il a dit que le mot de passe est fourni est très faible. Alors ajoutons quelques lettres à cela. Et puis il a ajouté avec succès l'utilisateur. Pour revenir à notre chaîne de connexion, nous devons remplacer ces données ici. Donc, d'abord, je vais mettre ici le nom d'utilisateur, l'utilisateur e-Sharp, et le mot de passe que j'avais avant, et le nom de la base de données. Ok, on n'a pas encore cette base. Alors ajoutons un. On retourne aux grappes. Et puis nous pouvons voir ici nos collections. Et dans cette liste de collections que j'ai précédemment, je peux créer une nouvelle base de données. Donc, je vais lui donner un nom E-Sharp, que la base et le même nom pour la collection. Retour a pris cette chaîne de connexion. Nous pouvons maintenant ajouter un nom de base de données. Donc maintenant, nous avons la chaîne de connexion complète. Nous avons déjà parlé des variables d'environnement. Donc, stockons cette chaîne dans les variables d'environnement, donc je la copie. Et puis je crée, par
exemple, une variable, appelle chaîne de connexion. Et puis je lui donne cette valeur, qui est la chaîne que j'ai obtenue du nuage de base de données. Et ici, je dis juste variable d'
environnement point de processus , point, connexion, chaîne. Alors maintenant comment nous pouvons vérifier que nous sommes connectés à la base de données ou non. Si nous vérifions cette méthode Connect, nous remarquerons qu'elle renvoie une promesse. La promesse est normalement exécutée et elle renvoie deux méthodes. L' un est alors quand ses succès et l'autre avec l'erreur quand il échoue. Donc ici, je vais mettre alors. Et puis si je
fonction flèche et que je consigne un message par console, cette connexion à la base de données est prête. Et quand il échoue sur capture. Et c'est aussi la méthode de la flèche. Nous pouvons dire que la console consigne l'erreur. Essayons de démarrer notre serveur. Alors maintenant npm commence. Et nous voyons qu'il y a des notifications disant que l'avertissement de dépréciation. Il dit que l'analyseur de chaîne d'URL actuel est obsolète. Nous devons donc utiliser une variable spécifique. Nous devons donc utiliser une option spécifique comme un vrai pour faire disparaître cette dépréciation. Mais comment nous pouvons l'utiliser, nous voyons que cette méthode de connexion a un autre paramètre appelé options. Donc, avec ces options est un objet où je peux passer les options que je veux. Alors copions celui-ci. Ajouté en option. Nous avons également un autre avertissement de dépréciation qui est l'utilisation de la topologie unifiée. Ceci est également utilisé pour la recherche des serveurs. Alors ajoutons ça ici. Et sauvegardons. Nous recevons toujours des erreurs. En fait, l'erreur que nous devons passer aussi le nom de la base de données dans les options. Donc, je peux dire que c'est un mot réservé, il s'appelle nom DB. Et avec ce nom TB, je peux passer le nom de la base de données. Nous avons nommé notre base de données dans le Cloud comme e-shop que la base. Et après avoir enregistré et essayé de se reconnecter, nous voyons à nouveau que l'authentification a échoué. Dans MongoDB Atlas, vous devez donner un axe réseau. Donc, cet accès réseau, vous devez avoir une liste blanche d'adresses IP qui peuvent accéder à votre base de données. J' ai déjà deux IP. Je peux ajouter une autre adresse IP en allant, par exemple, à Google et en tapant simplement ce qui est mon IP. Et dans le premier résultat de recherche, je vais obtenir mon adresse IP directement. Donc, je vais ici, copier cette adresse IP, puis je dis ajouter la nouvelle adresse IP. Donc, cette adresse IP est ajoutée, je peux dire mon bureau à domicile. Et puis je clique sur Confirmer. Revenons à l'application. Nous pouvons voir si nous sommes en mesure de nous connecter ou non. Donc on peut appuyer à nouveau sur Enregistrer. Et nous voyons ici que le serveur est en cours d'exécution, mais nous n'avons pas encore reçu de réponse du serveur de base de données. Et nous voyons que la connexion à la base de données est prête. Ainsi, nous connectons le problème de l'application back-end à la base de données dans le Cloud. La partie suivante, nous allons voir comment écrire des données cette base de données en utilisant nos API que nous avons créées auparavant.
12. Utiliser l'atlas MongoDB: Bien sûr, il existe aussi un outil local pour naviguer dans la base de données de MongoDB. Vous n'avez pas à utiliser notre cours en ligne. Vous pouvez également télécharger un outil qui a plus,
plus de fonctionnalités comme nous le verrons plus tard, comme l'exportation et l'importation de données. Parce que je veux vous donner les fichiers et les données et la base de données que j'
ai créée pour ne pas être pris la peine de remplir vos données ou base de données par les vôtres. Vous aurez les fichiers prêts. Vous pouvez donc utiliser cet outil pour importer comme les bases de données et les tables et les documents dans votre base de données. Avec cette conférence, il y a un lien attaché pour et quelque chose appelé MongoDB Compass. Et c'est un très excellent outil pour parcourir la base de données MongoDB. Et il est disponible pour toutes les versions de systèmes d'exploitation. Aussi, comme pour Windows, pour un Ponto, et aussi pour Mac OS. Donc, après avoir téléchargé ce lien, il vous donnera une application que vous pouvez utiliser. Et cette application, vous pouvez l'installer sur vos applications, puis vous pouvez l'ouvrir. Ok, ouvrons l'application installée. Comme je le montre ici, je l'ai ici dans ma liste d'applications, dans mon système Mac. Et il va ajouter pour moi la boussole MongoDB. Comme vous le voyez ici, nous l'initialisons. Donc c'est l'initialisation. Et laissez-moi zoomer un peu comme Donne qu'il soit plus grand. Donc maintenant, il me demande d'ajouter une chaîne de connexion, que nous avons créée dans la conférence précédente afin que je puisse aller copier ma chaîne de connexion, puis collé ici, puis cliquez sur Connecter. J' ai déjà expliqué comment obtenir le nom d'utilisateur, le mot de passe, et aussi le nom de la base de données. Donc, je l'ai déjà fait. Donc c'est récent. J' ai ici l'utilisateur e-shop et aussi MongoDB et toutes ces informations entre elle. Donc maintenant, nous devons cliquer sur Connect. Et puis il va se connecter à ma base de données. Comme vous le voyez, j'ai répertorié tout mon cluster, qui sont que j'ai dans l'atlas. Nous avons donc toutes les bases de données que j'ai créées précédemment. Et aussi la base de données avec laquelle nous allons travailler. Vous avez donc deux options. Peut-être que vous pouvez utiliser MongoDB Atlas ou MongoDB Compass, composés MongoDB. Vous n'avez pas besoin de regarder dans le navigateur et regarder dans le site Web de MongoDB Atlas. Mais vous pouvez entendre utiliser localement. Il suffit d'ouvrir une application, ajouter votre chaîne de connexion, et elle sera toujours enregistrée ici. Dans ce cours, je vais utiliser MongoDB Atlas. Et quand nous allons pour le déploiement, je vais utiliser MongoDB Compass parce que nous devons importer et exporter des données. Et aussi. Dans la prochaine conférence plus tard, je vais vous montrer comment importer et semer votre base de données. Vous n'avez pas à remplir toutes ces informations manuellement, comme la base de données. Ainsi, vous aurez déjà la base de données que vous pouvez importer dans votre collection et ensuite vous pouvez l'utiliser. J' aime suivre leur cours.
13. Lire les données d'écrire des données à l'aide de l'API: Parfait, Donc je suis tellement heureux maintenant que nous avons une connexion réussie à la base de données, essayons maintenant de poster quelques données dans la base de données afin que nous puissions les voir dans le Cloud MongoDB. Dans la base de données relationnelle. Auparavant, nous avons vu que la relation entre les tables, mais ici en MongoDB, il est acquérir différent. Nous pouvons considérer que la table de nommage est une collection. Donc, comme nous le voyons ici, nous avons déjà une base de données. A l'intérieur de cette base de données, il y a une collection. Donc, nous pouvons dire que la collection est une table dans la base de données relationnelle. J' ai supprimé la base de données que nous avons créée auparavant. Je vais en créer un nouveau avec la table, appelons-le un produit. Donc, par exemple, nous avons dit que notre nom de base de données est e-shop. Base de données. Produits est le nom de la collection. J' ai donc la base de données. Chaque base de données et à l'intérieur il y a une table ou une collection. On peut appeler ça un produit. Ok, super. Donc maintenant, nous avons, disons cette collection, posons des données dans cette collection. Donc, dans Postman, comme nous l'avons vu avant, nous avons ici à cet objet, poussons dans cette base de données. Mais d'abord, ce que nous devons faire dans l'application Node.JS, nous devons créer un modèle avec Mongoose. modèle est la même chose qu'une collection. Donc, nous pouvons dire dans MongoDB, il s'appelle collection et dans Node.JS, c'est appelé modèle. Nous devons donc créer un modèle de produit. Ce modèle contiendra les colonnes dont nous avions besoin pour le produit. Par exemple, le nom ou l'image, ou par exemple, la quantité du produit dans le stockage en Mongoose. C' est ce qu'on appelle schéma. Et si nous allons là-bas à la documentation, nous voyons que Mongoose a beaucoup de flexibilité ici. Nous pouvons donc créer des schémas. Par exemple, le schéma de bloc comme nous le voyons ici. Et nous pouvons mettre le titre du champ, l'auteur, le corps, et il y a le type de celui-ci, et chaque champ a quelques options. Ainsi, vous pouvez spécifier, par
exemple, point de date. Maintenant, par exemple, nous sommes dans cet enregistrement ou ce document est créé, alors nous verrons qu'il prend automatiquement la date de l'heure actuelle. Alors commençons simple. Donc, nous allons d'abord créer le modèle de produit. Je vais à l'application et après, disons utiliser et avant les API. Je crée, par exemple, à constante, appelle schéma de produit. Et ce schéma de produit utilisera la bibliothèque et le schéma Mongoose. Et le schéma acceptant un objet et cet objet prendra les champs comme nous l'avons vu ici dans la documentation. Donc, nous avons un nouveau schéma et ici nous pouvons lister nos champs. Alors ajoutons nos champs que nous avions auparavant. Alors je dis que j'ai besoin du nom. Nous tapons est chaîne. Et par exemple, j'ai aussi besoin d'image. Quel type également chaîne. Il contiendrait l'URL de l'image. Et ajoutons aussi quelque chose comme compter en stock. Compter en stock. Et ce compte en stock sera un nombre. Il y a beaucoup de types. Vous pouvez vérifier la documentation de la mangouste et nous verrons dans le cours les différents types que nous utiliserons pour notre application de boutique en ligne. Après avoir ce schéma, nous devons créer le modèle. Donc, je dis produit constant. Normalement, les modèles commencent par lettre majuscule. Donc, nous pouvons dire produit, qui est le modèle de dot mongoose. Et le modèle appelé, ou la collection est appelée produit. Et en utilisant le schéma de produit que nous avions avant ici. Donc, je dis schéma de produit, et j'appuie sur Enregistrer. Maintenant, nous avons le schéma de produit et le modèle de produit déjà défini. Donc maintenant, nous devons, par
exemple, avec des demandes de publication, nous devons recevoir ces données de poste de l'extrémité frontale, qui est que nous pouvons dire facteur ou toute autre application comme Angular ou React. Ensuite, nous devons recevoir ces données par le back-end, les analyser et les pousser dans la base de données. Pour ce faire, nous devons d'abord créer un nouveau produit, par
exemple, de ce modèle. Alors faisons ça. On peut dire const product. Et ce produit est nouveau produit que nous avions auparavant. Mais quels sont les domaines de ce produit ? Donc le produit est ce modèle que nous avions avant. Et nous allons ajouter les champs de ce produit, comme le nom. Et l'image et le compte en stock. J' irai donc ici et je recevrai cette demande, que j'ai reçue. Avec cette demande, j'ai le corps. Et avec le corps dans le corps, j'envoie ici id, nom, image, et je peux envoyer aussi compter en stock. Ce sera exactement le même nom ici, qui vient de l'extrémité frontale. Ainsi, le frontal et le backend doivent s'entendre sur le même nom pour les champs et l'objet qui sont envoyés au backend. Donc ici, je dis que le nom est le corps du point de requête, le nom du point. L' image est le corps du point de requête, l'image du point. nombre en stock provient également du nombre de points du corps de la demande en stock. Maintenant, nous avons le modèle prêt, donc nous avons juste besoin de l'enregistrer dans la base de données. Donc, pour ce faire, nous pouvons dire point de produit. Et il a une méthode appelée Enregistrer. Sauver. Cela signifie que l'enregistrer dans la base de données. Si nous vérifions cette méthode de sauvegarde, elle renvoie une promesse, promesse avec le document. Donc on peut dire, alors ça revient une promesse. Donc, nous pouvons dire produit créé. Donc, c'est le produit après qu'il a été créé dans la base de données. Donc c'est notre propre méthode. Donc, nous pouvons dire ici, l'état du point de réponse, que c'est la connexion réussie ou la création réussie de la base de données du document. Donc, je peux dire ici point JSON. Donc, je veux retourner le produit créé pour le voir dans l'extrémité frontale. Et en cas d'erreur ou quoi que ce soit peut arriver, nous pouvons dire attraper l'erreur. Et cette erreur, nous pouvons dire l'état du point de réponse. Par exemple, 500. C' est le code de réponse pour les erreurs dans le HTTP dot JSON. Je crée, par exemple, mon propre objet. Je dis que l'erreur est l'erreur que j'ai eue. Et par exemple, je dis que si son succès ou non, peut-être que je peux utiliser cette variable dans le front end. Par exemple, pour mettre fin à un chargement ou revenir à la page d'accueil. S' il y a un échec. Nous envoyons déjà ce produit. Supprimons cette partie ici et commençons notre MPM backend, commencez. Nous l'avons maintenant prêt et la connexion est prête. Postons quelques données ici. Joli. C' est vanté, on a une pièce d'identité, un nom, une image. Donc, si nous allons à notre collection dans MongoDB, Appuyons sur Refresh ici. On a les mêmes données ici. Essayons à nouveau en ajoutant le nombre en stock. Dites par exemple, 500 pièces dans mon stock. Je l'envoie. J' ai créé un nouveau produit avec le même nom, et il renvoie l'ID du produit créé. Pour revenir à MongoDB, actualisez à nouveau. Joli. J' ai également deux produits déjà postés via mon API dans le back-end. Et nous remarquons ici que c'est verrouillé et réussi. Faisons une erreur. Par exemple, pour faire une erreur, faisons ce champ comme nécessaire. Donc, la base de données reconnaîtra que ce nombre dans Stoke est obligatoire champ. Donc, il répondra avec erreur que vous n'avez pas envoyé, par
exemple, le nombre en stock. Pour ce faire, nous revenons au schéma et nous le changeons en un objet. Le type de cet objet est le nombre et obligatoire est vrai. Alors sauvegardons et exécutons notre, encore une fois notre API, mais sans compter en stock. Et si nous validons le JSON et envoyons à nouveau, nous verrons que nous avons reçu une erreur, erreur et réussi, faux ou échoué. Donc, dans ce cas, je dirais que l'erreur est validation ou le nombre de chemin d'erreur en stock est requis. Donc, la base de données m'a répondu que ce champ est obligatoire. Quand je le fais à nouveau, son succès. Donc maintenant, nous avons posté une donnée sur le back-end. Créons une requête get. Donc, je veux obtenir ces données, afficher leurs informations de produit dans le front end, par exemple. Donc, pour ce faire, nous devons créer une demande get. Donc, la création d'une requête GET simplement nous changeons ceci pour obtenir. Et nous devons spécifier la liste des produits. Donc, par exemple, nous allons obtenir l'ancienne liste de produits. Et si j'envoie la demande, je reçois l'ancienne API que nous avions auparavant. Donc, changeons-le pour l'avoir à partir de la base de données. Pour ce faire, nous allons à la demande get, puis nous remplacons cette constante et l'appelons, par
exemple, cette liste. Et j'appelle juste le modèle lui-même que nous avons créé avant et trouver. C' est ça. Donc, je dis const liste de produits et la réponse obtiendra notre, envoyez-moi la liste des produits. Essayons ça. Nous montons. Nous remarquons que nous avons une erreur ici. L' erreur est due au fait que cette méthode find renvoie une promesse. Et ici, quand j'envoie la réponse, peut-être que cette liste de produits n'est pas encore prête et je ne l'ai pas encore reçue. Je dois donc attendre que cette liste de produits soit prête, puis je peux l'envoyer avec la réponse. Il y a une autre façon que de faire, par
exemple, point puis et ne pas attraper. C' est quelque chose que nous pouvons faire avec le mot-clé wait. Et dans le mot-clé wait, il nécessite toujours la méthode asynchrone. Donc j'ai mis cette méthode ici et c'est asynchrone, et j'ai un poids ici. Donc, dans ce cas, quand j'appelle la liste des produits, alors il va attendre, il sera rempli, puis j'envoie la réponse à l'extrémité frontale. Alors refaisons-le. Maintenant. J' enregistre et puis envoie cette demande, nous voyons que nous avons les données ici. On n'a plus eu l'erreur. Donc c'est à cause de cela que nous rendons une promesse. Nous devrions attendre que la base de données nous envoie leur réponse, puis nous attendrons en première ligne. Alors peut-être que vous me demanderez comment je peux détecter le problème ou les problèmes. C' est très simple. Je peux dire si une liste de produits ou pas de liste de produits, s'il n'y a pas de liste de produits, alors je peux dire l'état de point de réponse 500. Et par exemple, avec JSON, je peux dire erreur ou succès false. Donc, s'il y a une erreur qui s'est produite, par
exemple, une connexion ou quoi que ce soit, je peux simplement renvoyer une erreur avec un succès si cette liste est vide. Nous avons donc deux façons différentes d'exprimer et d'attraper les erreurs de la base de données. Donc, je peux dire ici, trouver, je peux mettre un poids et asynchrone, ou je peux le faire avec des promesses normales. Comme par exemple, je dis Enregistrer, point puis et attraper. Bien sûr, c'est plus d'économie de code. Nous l'avons fait seulement en deux lignes, et c'est très bien. Donc, à partir de maintenant, nous allons utiliser toujours async et attendre. C' est tout pour l'instant, c'est la mangouste. Faisons un peu de refactoring. C' est très agréable d'avoir les routes dans certains fichiers et les modèles dans un autre fichier. Ainsi, nous pouvons avoir plus d'organisation de notre code, du backend.
14. Analyser la base de votre base de données de votre boutique: Bienvenue de retour. J' ai changé d'avis ici, donc nous ne ferons pas de refactoring. Analysons d'abord la base de données de e-shop. Donc, de cette façon, nous pouvons savoir quelles routes et quels schémas nous pouvons construire et créer les fichiers dans le back-end. Donc, ici, nous avons le moins des tableaux documents
ou des collections dont nous avons besoin dans notre base de données. Chaque boutique a des produits, des commandes, des catégories, des utilisateurs et des articles de commande. C' est la boutique en ligne la plus simple. Donc, lorsque vous voulez grandir plus, vous devez avoir plus de tables comme un avis ou par exemple, certaines nouvelles catégories sont des catégories plus grandes. Donc, nous commençons simple et nous allons construire notre e-shop pour être plus grand lentement. Tout d'abord, les produits, par
exemple, il a ID, qui est l'ID du produit. Et cet ID est généré lorsque nous publions un ID dans la base de données automatiquement par MongoDB. Le nom du produit, ainsi que la description. Et la description atteint la scription est utilisée
pour, par exemple, je veux stocker du code HTML. Parfois, les gens utilisent comme une description des produits avec des images et des titres et quelques textes compliqués de portée. Donc, nous allons voir comment nous aurons éditeur dans le front end. Pour HTML. Nous avons également besoin de l'image principale du produit. Et c'est une chaîne, chaîne, qui stockera l'URL de cette image. Aussi, nous avons besoin d'une galerie de, une galerie aura quelques images et tableau de chaînes, d'URL où nous avons une galerie du produit, plus de détails sur le produit. Et puis nous aurons une marque et aussi le prix, prix de la catégorie de produits. Ce sera la catégorie de type. Dans MongoDB. Ici, nous aurons quelque chose appelé références. Ce n'est pas comme les bases de données relationnelles, mais ici nous pouvons définir le type de la table directement. Donc, comme nous le verrons à l'avenir, nous verrons que cette catégorie est un type de catégorie ou a une référence à la table des catégories. Et compter en stock combien d'articles de ce produit sont dans le stockage. Note également basée sur les commentaires et si ce produit est en vedette ou non. Donc, pour le voir dans la page d'accueil immédiatement comme un produit vedette. Et puis nous verrons que ce qu'ils, ce produit est créé quatre catégories. On a juste besoin d'un nom, peut-être des données supplémentaires. Par exemple, ce dont j'ai besoin dans le front end, parfois la couleur, afin que je puisse colorer chaque catégorie en fonction d'une couleur spécifique et aussi icône ou image. Pour les commandes, nous avons besoin d'articles de commande, qui est un tableau d'article de commande. Et l'article de commande est une table où il contient le produit et la quantité. Ainsi, chaque commande aura un produit et la quantité. Alors peut-être que j'aurai 10 produits. Je les ai commandés dans un ordre. Et puis chaque produit aura une certaine quantité. L' adresse d'expédition un et l'adresse deux. Et la ville, le code postal, le pays, numéro de
téléphone de l'état de l'utilisateur pour voir si cet ordre de naissance est, par
exemple, plié, expédié ou livré. Et aussi le prix total. Nous verrons comment calculer le prix total en fonction des articles
de la commande et de l'utilisateur qui a commandé cette commande. Parce que nous aurons la recherche de tous les utilisateurs qui veulent commander quelque chose. Et puis la date de l'ordre. Pour les utilisateurs. Nous avons besoin d'un nom d'ID, e-mail, où l'utilisateur se connectera avec son e-mail et le hachage du mot de passe. Le mot de passe doit être stocké haché dans la base de données. Je ne peux pas le stocker en texte brut. Rue, appartement, ville et code postal. Et aussi pays avec un numéro de téléphone. Et aussi pour savoir si cet utilisateur est admin. Ainsi, il peut se connecter au, par
exemple, panneau d'administration ou non. Peut-être que quelqu'un demandera pourquoi j'ai séparé ici l'adresse de l'utilisateur. Comme par exemple, je peux avoir une table supplémentaire comme adresse ici. Alors je peux mettre ce champ dans cette table. Et je peux relier l'utilisateur et les ordres à cette table d'adresses. En fait, la plupart d'Aesop a un problème que parfois l'utilisateur, après avoir commandé quelque chose, il a changé d'adresse. Mais la commande est déjà expédiée. Nous avons donc besoin de stocker la commande comme un avion avec une adresse d'expédition, comment l'utilisateur l'a placé, pas liée à l'adresse de l'utilisateur. Nous utiliserons cette adresse juste pour remplir automatiquement adresse
de la commande lorsque l'utilisateur commande quelque chose après avoir verrouillé. De cette façon, nous avons pris un aperçu de notre base de données dans MongoDB. Maintenant, nous allons aller au backend et créer les fichiers et refactoriser notre code un peu pour être basé sur cette structure de base de données.
15. Créer des itinéraires et des schémas de l'API: Bienvenue de retour. J' imagine maintenant que si nous plaçons tous les schémas ici dans ce fichier App.js, ce serait très grand. Et je pense que nous aurons des milliers de lignes ici. Donc normalement dans Node.JS, les gens ou les codeurs en général, ils mettent ces routes, par exemple, les routes API, et aussi les schémas dans des fichiers séparés. Pour, faisons cela maintenant et nous allons voir comment organiser le projet de meilleure façon. Ainsi, les schémas. Créons un dossier ici. On appelle ça des modèles. Et à l'intérieur modal, nous allons créer un fichier pour chaque modèle que nous avons, par
exemple, des produits ou des produits dot js. Dans les produits AS je vais placer ce schéma. Copions cette partie et placez-la ici. Mongoose n'est pas défini dans ce fichier, donc nous devons également copier cette partie où const mongoose nécessite
mongoose parce que ce fichier ne peut pas voir le Mongoose importé dans le app.js. Donc, nous avons ici const mongoose et mongoose schémas. Et au fait, prenons aussi le bosse. Bien qu'on le coupe et on le place ici. Maintenant, comment ArcJS utilisera ce modèle dans Node.JS. Si nous voulons exporter une constante ou par exemple, une classe ou un objet, nous disons simplement que nous devons le faire de cette façon. Exporte le produit point, puis le modèle. Donc ici, dans ce cas, le produit sera vu dans n'importe quel autre fichier. Et je peux l'importer avec la méthode require. Donc, aller au fichier ab.js et je dis produit const, qui vient de l'exiger de ce fichier où nous avons le modèle, par
exemple, les modèles slash produit. Dans ce cas, nous avons obtenu le produit et nous pouvons l'utiliser comme modèle pour notre API. Faisons plus de refactoring. Nous voyons que nous avons toutes les API, obtenir post, GET post. Donc, si nous faisons cela pour tous les schémas, ce serait très gros fichier. Il y a un moyen dans Node.JS que vous pouvez également stocker les routes ou les API dans un fichier séparé. Je vais vous montrer comment le faire. Alors commençons par créer un dossier Word, des routeurs de sécheresse. Et à l'intérieur du routeur, je crée aussi des produits, le js. Donc, pour chaque modèle, il y a
peut-être des routeurs. En Express. Il y a quelque chose appelé routeur, et ce routeur est uniquement responsable de la création d'API, du
blocage des API et de les importer et de les exporter entre les fichiers. Alors, comment faire ça ? abord, nous devons importer l'Express. Exiger Express. Et le routeur fera partie d'Express. Donc, nous pouvons dire routeur point Express. Donc, ce routeur, quand je l'importe dans ArcJS, je peux l'utiliser ici. Et ce routeur, il peut être utilisé comme un middleware, donc je peux l'utiliser avec l'utilisation de l'application. Donc, d'abord, passons, voyons comment déplacer ces routeurs. Donc, d'abord, copions toutes les API que nous avions et placez-les ici. Au lieu de l'application. Je dis juste routeur. C' est très simple. Et aussi je les supprime d'ici. Et comme nous l'avons dit jusqu'à la 2s est, il peut utiliser aussi que l'extérieur. Ainsi, nous pouvons prendre la route principale de l'API des produits et placer ici, par
exemple, le routeur de produit. Mais d'où ces produits routeur viendra, il viendra d'ici. Donc, je ne peux pas dire que je veux exporter aussi le routeur. Donc, je peux aller ici et dire que les exportations de points de module sont routeurs. Donc, nous avons ici une façon différente d'exporter. Ici, nous exportons le produit lui-même, et ici nous exportons un module. Donc, de cette façon, je peux dire que le routeur de produits est une constante. Donc on peut dire ici, constant. Routeur de produits venant de, nécessitent, de routeurs. Et puis les produits. Donc, nous allons voir ici que cette application utilise ces routes à partir de routes qui viennent du routeur de produits. Donc ici, nous devons faire quelque chose. Nous ne pouvons pas utiliser l'API comme ceci, car sinon ce sera, nous pouvons considérer cela comme les enfants. Donc, par exemple, ici, je dois placer seulement la cachette afin que je puisse le considérer quand je dis localhost 3000 produits slash, alors je peux atteindre celui-ci, obtenir. Et la même chose pour le poste. Si je veux quelque chose à l'avenir comme count, je le mets comme ceci, alors l'API sera http 3000 produits slash nombre. C' est donc la meilleure façon de gérer ces sorties dans un fichier séparé. Mais d'abord, nous avons ici le produit modèle. Nous devons donc également importer ce modèle. Donc, je dis const, produit est nécessaire à partir des modèles du produit. Maintenant, nous avons les routes terminées. Donc, nous avons tout obtenir post et nous verrons comment ajouter la suppression et la mise à jour. Sauvegardons ce fichier et enregistrez-le ici. Faites un peu plus d'organisation du code ici pour que nous n'en ayons plus besoin. Pour qu'on puisse entendre, disons les routeurs. Et ici, le routeur de produit, nous pouvons l'importer ici. Voyons maintenant si tout fonctionne bien, nous pouvons dire MPM, commencer. Tout est connecté et tout fonctionne comme de la fumée. La même chose ira aussi pour les autres collections de bases de données. Par exemple, je vais avoir ici commandes GS et aussi utilisateur et aussi la catégorie. Aussi la même chose pour les auteurs. J' aurai les mêmes fichiers. Donc, je suis sûr que vous n'êtes pas intéressé de voir tout le processus parce que c'est exactement la même chose. Je vais les ajouter. Et puis nous verrons après cela comment ils ressemblent à la fin, notre application ressemble à ça. Dans app.js. Nous avons les middlewares, les routes, ainsi que la connexion de base de données et le vendeur. Dans les routes. J' ai créé des itinéraires pour chaque type ou, ou pour chaque collection que nous avions dans notre application. Donc, je vais ici et j'ai créé ça exactement comme les produits. Nous avons, les commandes des utilisateurs, les catégories. Et la même chose pour les schémas. Chaque schéma a son propre maintenant. Donc, dans ce cas, nous avons maintenant tout prêt pour créer nos API. Actuellement, je n'utilise que get dans tous les types. Je veux juste mentionner une chose. Lorsque nous exportons le modèle à partir des exportations point-produit de cette façon, pas de cette façon. Lorsque nous l'importons, nous devons l'importer en tant qu'objet. Donc ici, quand je vais aux produits, je l'importe comme ça. Dans ES6, nous avons cette destruction d'objet. Donc, ce modèle renvoie un objet. J' ai donc besoin de créer un nouvel objet et d'affecter tous les champs de cet objet à celui-ci. Donc, dans ce cas, je peux l'utiliser partout pour sûr qu'il n'y a aucun problème si vous utilisez de cette façon. La façon d'exporter le module directement. Essayons notre API. Maintenant. Je vais ici et je dis obtenir, J'ai la liste des produits. C' est tout pour l'instant. Pour les prochaines conférences, nous verrons comment remplir ces schémas et comment le connecter aux structures de notre base de données. Et nous verrons comment continuer à construire notre e-shop d'une meilleure manière.
16. Activer CORS et pourquoi nous avons besoin de CORS: Si vous faites un front end et le développement back-end dans leur même temps. Je suis sûr que vous avez vu cette erreur. Cette erreur appelée Cross-Origin Resource Sharing, ce qui signifie dans un langage humain que application
Node.JS ne peut faire confiance à aucune autre application. Donc, quand j'envoie des demandes de mon front end au backend, alors le back-end quand Lot me répond la même que je veux parce que c'est interdit. Il utilise un port différent, ce qui est totalement un domaine différent. Donc, dans mon application frontale, lorsque je crée un service pour appeler les API, alors j'obtiens cette erreur. Et dans Mozilla org, ils expliquent toutes les données ou tous les détails de ce cours. Donc, d'une manière ou d'une autre dans l'application NodeJS, nous devons activer ces cours. Comment nous pouvons permettre à n'importe quelle application de demander l'API à partir de mon serveur. Il y a une bibliothèque appelée cours. Nous pouvons l'utiliser pour permettre le cours pour n'importe quelle application. Donc, j'arrête le serveur et je dis npm installer cours. Après l'avoir installé, nous devons l'exiger et l'importer. Donc, ici, nous importons tout dans ArcJS. Donc, je dis cours const, exiger cours. Et pour activer le cours, c'est très simple avant tout, avant que l'application ne commence, avant d'utiliser n'importe quel service dans l'application, nous devons faire, n'utilisez pas de cœurs. Et les options de point d'application. Avec Star, comme tout. En utilisant le cours. Options de point de cette application. Cela signifie que c'est un type de requêtes HTTP, comme GET et post and put and delete. Mais qu'est-ce que c'est ? Lorsque nous Google options http, nous voyons que l'option HTTP est une méthode demande options de communication
autorisées pour une URL donnée au serveur. Donc, quand je dis, je veux une étoile, donc je vais tout permettre avec l'utilisation de ce cours. Donc, dans ce cas, j'autorise toutes les autres requêtes HTTP à passer à partir de n'importe quelle autre origine. Il est donc très important d'utiliser ce cours et de leur permettre d'éviter cette erreur. Enfin, après avoir terminé ce module ou cette section, je dirais que ce projet est le démarrage pour nous pour créer le problème de back-end. Donc, je vais le mettre comme un fichier zip afin que vous puissiez le télécharger et commencer à partir d'ici. Vous pouvez voir ce projet dans les ressources avec cette conférence. Dans les modules suivants, nous verrons comment construire tous les schémas et les API pour chaque partie de l'application.
17. Produits et Categoris: Maintenant, les choses commencent à être difficiles. Non, non, je donne juste. Dans ce module, nous allons voir comment travailler avec le produit lui-même et ses catégories, bien
sûr, dans la partie back-end. Donc, les principales étapes pour créer notre produit maintenant, pour importer toutes les données du produit à l'extrémité frontale. Ce que cela signifie que nous voulons créer une API pour récupérer toutes les données de produit à notre front end. Donc, nous avions besoin d'une manière ou d'une autre en tant que JSON, cela inclut également la création du produit et le mettre à jour et le supprimer. Nous allons donc d'abord créer les schémas de produits et de
catégories dans la base de données au niveau de l'application. En outre, nous allons commencer aussi simple que possible. Donc, les catégories sont la chose la plus facile que nous puissions faire maintenant. Nous allons donc faire le reste de l'API pour les catégories. Et nous continuerons à publier un nouveau produit dans la base de données via l'API restante. Et puis nous obtiendrons la liste des produits. Et après cela, nous obtiendrons un détail de produit par ID. Et puis nous verrons comment connecter les produits avec la catégorie. Par exemple, lorsque je reçois un produit, je vais voir comment obtenir les détails de la catégorie à l'intérieur du produit. Après cela, nous devons mettre à jour notre produit. Parfois, nous avons besoin de mettre à jour le prix, ou nous voulons mettre à jour leur image, ou nous voulons mettre à jour le nom du produit. Suppression d'un produit. Parfois, lorsque je n'ai pas le produit, je l'ai supprimé de mon magasin. Ensuite, nous voulons faire quelques statistiques comme obtenir le nombre de produits, quantité de produits que j'ai dans mon magasin. Par exemple, je veux voir uniquement les produits en vedette. Parce que si vous vous souvenez, nous avons est drapeau en vedette. Nous vous savons, quels produits sont présentés afin que nous puissions les
prendre et les afficher sur la page d'accueil seulement. Et puis il est très important que nous ayons un filtrage. Nous devons donc filtrer leurs produits en fonction des catégories. Donc, je ne vais pas seulement par exemple, quelque chose pour la santé. Donc, je reçois les produits qui sont là catégories est la santé. C' est tout pour l'instant. J' espère que vous apprécierez ce module. Ce sera un peu détaillé, mais après cela, vous serez en mesure de créer les commandes et les utilisateurs, comme nous le voyons dans les prochains modules.
18. Produits Modèle Schema: Bienvenue de retour. Dans cette conférence, nous allons voir comment construire le modèle de produit ou le schéma de produit. Tout dans Mongoose commence par le schéma. Chaque schéma est mappé à une collection MongoDB et définit la forme du document dans cette collection. Donc, en fonction du modèle que vous voyez à droite de l'écran, nous allons construire le même schéma que nous le construisons auparavant dans ce modèle. Donc, les champs du produit peuvent être comme commencer ici, je dis que le type de ce champ est une chaîne. Et il y a des options de schéma ou des options de type de schéma. Cette option de type de schéma, vous pouvez les voir sur la documentation Mongoose. Alors je vais ici à la documentation de Mongoose. Je vais aux types de schéma. Et dans les types de schéma, nous pouvons voir qu'il existe de nombreux types. Par exemple, chaîne, nombre, date, et il y a quelque chose appelé options, comme nous le voyons ici dans cet exemple. Donc, je vais, par exemple, au type de schéma, et je vois qu'il y a un chemin et des options dans la documentation Options de type de schéma, je peux voir toutes les options dont j'ai besoin pour construire mon schéma. Ce dont nous avons besoin en fait pour notre cours, je pense que nous avons besoin de ce champ requis et aussi quelque chose appelé href pour faire référence à une autre table et par défaut, qui est une valeur par défaut lorsque l'objet est créé du produit. Le nom du produit est donc toujours requis. Je l'ai mis à vrai. Le champ suivant est la description, qui sera une brève description du produit. Et ce sera aussi une chaîne. Est-il nécessaire ? Je dirais que la brève description sera nécessaire dans notre cas. Et puis passons à la riche description. Dans la description riche est également a une chaîne de type. Mais je dirais que ce n'est pas nécessaire. Et nous pouvons mettre une valeur par défaut pour cela quand il est créé. Par exemple, je dis chaîne vide. La même chose vaut pour l'image. Donc, je mets dire ici aussi, l'image est une chaîne et il a une valeur par défaut comme vide. Maintenant, nous allons aux images. Images. Ils sont toujours un tableau de chaînes. Donc, nous pouvons le mettre simplement comme ce tableau. Et le type de chaque élément de ce tableau est une chaîne. Nous avons aussi la marque, qui est sera la même chose. Chaîne et prix. Donc, le prix sera dans la façon dont le type est le nombre. Et la valeur par défaut. On peut dire qu'il est 0. L' étape suivante maintenant, nous devons ajouter la catégorie. Donc c'est simple. Nous disons que la catégorie est le type d'ID de la catégorie. Donc, ici dans le produit, quand je veux ajouter un produit, j'utilise l'ID de catégorie, pas toute la catégorie. Donc, je dis que le lien entre la table et
du produit et la table de catégorie est l'ID de la catégorie. Donc, le type de ce champ sera le schéma de points Mongoose, types de
points, l'ID d'objet point. Donc, dans ce cas, je dois toujours passer l'identifiant et comment je dirais que cet ID est connecté à une table de catégories ou à un schéma de catégories. C' est juste que je fais ça. Je dis qu'une référence est le schéma de catégorie. Donc, dans ce cas, cet ID sera connecté au schéma de catégorie. Donc, lorsque j'ajoute un produit, c'est la recherche dans les catégories et je ramasse un identifiant spécifique. Et puis je dis que ce produit a une catégorie, par
exemple, la beauté et la santé. Est-ce que c'est nécessaire ? Oui, ajoutons-le au besoin. Le prochain champ que nous faisons Nous avons déjà est compté en stock. Compter en stock, Il est normalement un nombre et nécessaire. Vous devez donc spécifier la quantité de ce produit que vous avez dans votre stockage. Il y a aussi une autre propriété que nous pouvons mettre max et Min. Par exemple, je dis que minimum a 0 et maximum. Il en a 255, par exemple. Donc, je dis ici que quand je poste un produit avec moins de nombre de nombre en stock, alors je vais obtenir une erreur parce que mongoose, quand il s'est tourné vers moi et me dire que, non, c'est faux. Vous devez mettre le nombre entre 0 et 255. La même chose va, par exemple, pour la notation et aussi un certain nombre de commentaires. Ce sont des chiffres. Donc je les ai ajoutés ici. Et le champ est en vedette est de type booléen. Donc, la valeur par défaut de celui-ci est false. Il s'agit donc de montrer le produit sur la page d'accueil en tant que produit en vedette. En outre, j'ai la date du champ créée. Donc, les données créées sont une date de type et la valeur par défaut est date point maintenant, donc c'est très simple. Donc, quand le produit ou cette demande arrive, alors cela prendra l'heure actuelle. Maintenant, nous avons tout le schéma sont prêts pour leur produit et nous
verrons plus tard comment ajouter le produit dans les demandes de poste et comment l'obtenir.
19. Modèle et schéma de catégories: Auparavant, nous avons créé le schéma de catégorie. Et comme vous le voyez ici dans le modèle à droite de l'écran, nous devons créer ces champs. Alors commençons par le nom. C' est exactement la même chose que nous avons fait pour le produit. Donc, je dis type de chaîne nécessaire à travers. Donc, pour ne pas prendre autant de temps à taper, je vais ajouter les autres champs car ils ont aussi le type de chaîne. Donc, ici, nous avons l'icône et la couleur. L' icône sera le nom de l'icône par exemple, nous utilisons des icônes de police ou des icônes de matériel Google. Donc, je ne peux dire que le nom de l'icône. Et aussi je dis ici la couleur, cette couleur sera un hachage, une chaîne de
hachage, comme quelque chose comme je peux dire 000 000 000, qui est noir. Donc, de cette façon, je peux stocker la couleur de la catégorie que j'ai besoin d'afficher à l'avant. Commençons donc maintenant avec la création de l'API de la catégorie. Dans la prochaine conférence, nous allons voir comment ajouter la catégorie et supprimé.
20. Ajouter et supprimer des catégories: Super. Alors, revenons au monde réel. Maintenant, nous allons avoir l'API de catégorie. Donc, dans cette conférence, nous saurons comment ajouter une catégorie et supprimer une catégorie. J' ai commencé simple ici parce que l'API de catégorie est la plus simple que nous verrons à l'avenir. Comment créer des API plus compliquées, comme les produits et les commandes. Donc, comme vous vous en souvenez avant de créer les itinéraires et les itinéraires, nous ajoutons nos API. Nous avons ici un GET, nous allons l'éditer pour faire mieux ou nous pouvons le garder pour obtenir la liste des produits. Maintenant, ajoutons une catégorie. Donc, en créant un point de routeur. Donc, je vais ajouter une catégorie, donc par barre oblique, puis asynchrone, requête et réponse. Ensuite, je vais faire ici l'ajout à la base de données en utilisant Mongoose et en ajoutant une nouvelle catégorie. Nous avons vu avant que la demande toujours obtenir les informations à partir de l'extrémité frontale, comment ils l'utilisateur envoie les informations. Et puis nous les lirons et les publierons dans la base de données. Créons, par exemple, une constante, nous pouvons l'appeler ou laisser la catégorie. Et ce sera un nouveau modèle de catégorie. Donc, cette catégorie, nous l'avons déjà importé ici. Et nous aurons l'objet de cette catégorie sera nom et aussi l'icône et la couleur, exactement comme le schéma. Alors comment j'obtiendrais ces données ? Donc, demandez le point, le corps, le nom du point. Donc le front end doit m'envoyer exactement ce nom. Donc aussi la même chose vaut pour la demande point, icône, point ou désolé, point, corps, icône point. Aussi pour la couleur. Nous ajoutons ici. La couleur. Si vous vous souvenez, lorsque nous avons posté un produit ici, nous avions quelque chose comme sauver. Donc, je dis le modèle dot save, et puis cette sauvegarde me rendra une promesse. Et puis je reviens avec le statut qui a créé les produits. Et nous avons parlé auparavant aussi d'attente et asynchrone. Alors faisons-le maintenant avec un poids et asynchrone. Donc, en utilisant un poids et un évier, je dis catégorie, que je l'ai créé avant. Je peux dire que notre poids de la catégorie, que j'ai créé dot save. Donc, dans ce cas, j'attends jusqu'à ce que cela soit sauvé. Et cette sauvegarde me reviendra une promesse avec le document ou la catégorie elle-même qui est créée. Et puis je vérifie s'il n'y a pas de catégorie, comme aucune catégorie créée. Ensuite, je dis erreur de retour. Ainsi, l'état du point de réponse indiquera 400 quatre, par exemple, points et que la réponse par exemple, ou la catégorie ne peut pas être créée. Par exemple. Et puis s'il y a une catégorie, alors je dis que les points de réponse terminent la catégorie. C' est très simple. En résumé, je crée un nouveau modèle de catégorie, puis je l'ai rempli avec des données. Je l'ai sauvegardé en utilisant Mongos et puis j'attendais ici jusqu'à ce que cette catégorie soit prête. Et puis je vérifie s'il y a une catégorie, il y a des données à l'intérieur de cette catégorie, puis je l'envoie. Mais si ce n'est pas le cas, je retourne une erreur. Commençons notre serveur maintenant. Mpm démarre connecté à la base de données. Tout va bien. Et j'utilise Facteur. Facteur par exemple, j'ai créé cette catégorie. J' ai dit que le nom est la santé et l'icône est la santé de l'icône et une certaine couleur. Je l'envoie et je vois qu'il est posté avec succès. Et j'ai un nouvel identifiant de cette catégorie pour vérifier si ça marche vraiment. Nous allons à nouveau à Atlas et vérifions dans la base de données. Je vais ici et je l'ai déjà trouvé. Alors créons une autre catégorie. Par exemple, comme les ordinateurs. Et cet ordinateur a icône ordinateur et une couleur spécifique à l'extrémité frontale, vous pouvez créer un ramassage de couleur. Ramassage de couleur. Nous vous attribuerons le code de la couleur. Par exemple, je dis 444, et je l'envoie et j'en ai créé un nouveau. Je vais à Atlas. Et dites « rafraichir ». Et nous verrons que cette catégorie est également ajoutée ici. Donc, nous avons des ordinateurs et la santé. Supprimons maintenant une catégorie. La suppression d'une catégorie est la même. Donc, nous ne pouvons pas dire point de routeur, supprimer, pas poster. Et je dis cela que je veux assigner pour supprimer une catégorie. Et puis je dis demande et réponse comme un rappel. Et j'utiliserais cette demande et cette réponse. Faisons-le ici avec le moyen de promesse. Nous l'avons fait avant avec un poids et asynchrone. Faisons-le ici avec un moyen prometteur. Donc d'abord, j'appelle le modèle, je dis point de catégorie. Il existe une méthode appelée find by ID and remove. Donc, nous trouvons un ID par et le supprimerons la même chose avec trouver par ID et supprimer. Donc ici, j'ai besoin de trouver la catégorie que je veux supprimer. Donc par carte d'identité. Donc, d'où je vais obtenir l'ID, je vais obtenir l'ID de l'utilisateur ou du client. Donc, le client m'enverra l'ID d' une manière ou d'une autre, puis je le trouverai dans la base de données et supprimé. Alors, comment puis-je obtenir l'ID du client ? Il y a un moyen, c'est très bon moyen. C' est par l'URL. Donc je ne peux pas dire ici par deux points et ensuite je peux dire par carte d'identité. Donc, cet ID, vous pouvez le mettre comme vous voulez, comme n'importe quel nom que vous voulez. Ensuite, l'URL ressemblera à api slash v1 slash l'ID, que je veux supprimer de la catégorie. Donc, ici, comment je vais obtenir cet ID à partir de l'URL. C' est très simple. Je dis la requête dot params dot id. Donc ici ce nom est le même nom que,
comme je l'ai assigné ici. Donc, par exemple, je dis catégorie id. I, alors je dois mettre ici l'ID de catégorie. Donc, avant de voir que nous avons demandé le corps. Le corps est quand nous envoyons la demande à l'intérieur du corps. Donc, ici, nous avons corps et nous envoyons dans le corps de la demande, les données. Mais maintenant, nous allons les envoyer ou nous allons envoyer l'ID par l'URL. Donc, comme nous le voyons ici, que cette méthode nous reviendra une promesse. Donc, je dirai alors et puis la promesse va retourner pour moi un document et le document qui est la catégorie supprimée. Donc, je dis ici, s'il y a une catégorie, comme si vous la trouvez, alors retournez un point de réponse, point d'
état ou désolé, 200 et point JSON. Et je peux créer mon propre objet. Je peux dire que le succès est vrai et un message à l'utilisateur. Donc je ne peux pas lui dire que la catégorie est supprimée. Et puis s'il n'y a pas de catégorie, quand je ne trouve pas cette catégorie d'autre, je dis retour, état du point de réponse. Le code introuvable est 404. Et ce JSON, je dis succès, faux. Donc, je n'ai pas trouvé cette catégorie et rien n'est supprimé. Donc, je peux dire dans la catégorie de message introuvable. Mais que se passe-t-il s'il y a une erreur qui s'est produite dans le serveur ? Par exemple, pas à propos de ne pas trouver cette catégorie, mais une erreur, comme une erreur de connexion ou si j'achète les données erronées, un mauvais ID. Donc, je ne peux pas dire ça avec l'erreur de capture. Je dis que s'il vous plaît trouver pour moi ou envoyez-moi un message qu'il y a une erreur qui s'est produite dans le serveur. En général, il ne s'agit pas de catégorie trouvée ou de catégorie introuvable. Donc ici, je dis réponse de retour, état de point. L' erreur en général est 400. Donc JSON. Et puis je dis que le succès est faux. Et puis je peux envoyer l'erreur au front end à l'utilisateur. Alors maintenant testons cette API, la suppression de la catégorie. Nous allons en créer un et supprimé en démarrant à nouveau le serveur. Mpm commence. Nous sommes connectés à cette base de données. Ensuite, nous allons créer, par exemple, nouvel ordinateur de catégorie par exemple. Ouais, ce nom, on le garde le même. Et je copie cette catégorie. Et puis je change cette méthode pour supprimer. Donc ici, je dis après les catégories, je dis l'ID de la catégorie que je veux supprimer. Et puis j'appuie sur Envoyer. La catégorie Nice est supprimée. Si nous obtenons à nouveau la liste des catégories, si vous voulez, vous pouvez voir ici l'historique de ce que vous avez fait auparavant. Donc, nous allons obtenir une liste de catégories. Nous avons encore l'ancienne catégorie qui mauvaise santé qui a supprimé aussi. Donc, je peux aller ici et dire supprimer cet ID. Et puis si je retourne chercher, j'aurais un tableau vide. Donc nous n'avons pas de catégorie. Maintenant, essayons de supprimer introuvable ID. Par exemple, je peux dire 444 ici. Donc, quand je l'envoie, je reçois la fausse catégorie de succès introuvable. C' est bien. C'est exactement le message que nous voulions. Et aussi, faisons une erreur. Normalement, si vous voulez faire une erreur en supprimant l'ID de catégorie similaire ou d'objet ID a ce format dans MongoDB. Changeons ces formats. Par exemple, je le fais court comme ça. Donc quand j'envoie, je reçois ici l'erreur. Donc, l'erreur est 400, puis je dis que le succès tombe et l'erreur s'est produite. Il s'agit de l'ID d'objet car il est mal formaté. Vous avez ici ce choix à faire entre les méthodes asynchrones, d'
attente ou avec alors. Donc, les promesses, ils peuvent être dans les deux sens. Tu n'as aucune différence. Mais ici aussi est plus guidé et voici un code plus court. Dans la prochaine conférence, nous allons voir comment obtenir
la liste des catégories et aussi une seule catégorie.
21. Obtenir les catégories et les détails des catégories: Dans cette conférence, nous allons obtenir la liste des catégories et catégories détaillées. Donc, d'abord, nous allons faire la liste des catégories. Nous l'avons déjà fait dans les conférences précédentes. Donc ici, j'utilise getMethod et ensuite j'utilise find. Avec l'utilisation de cette méthode, je vais obtenir la liste des catégories. Et s'il y a une liste de catégories, alors je vais obtenir, je l'enverrai par réponse. Et s'il n'y a rien, alors j'enverrai une erreur. Éditons, éditons ici. Et nous pouvons dire état 2s 200 que nous avons trouvé la liste des catégories. Maintenant, obtenons une catégorie par ID. Donc je vais dire ici ou modifier. Aussi c'est la requête GET. Donc, ce get acceptera la même API mais avec paramètre comme nous l'avons vu auparavant. Donc, j'utiliserais ici la méthode asynchrone, requête, réponse, fonction de rôle. Et puis je vais faire une catégorie constante. Et ici, j'utiliserais la méthode wait. Donc, je vais faire ici appelé la catégorie. Et il y a la méthode appelée find par ID. Donc, en utilisant cette méthode, je vais demander l'id de l'ID de point params de la requête. Et je vais vérifier s'il n'y a pas de catégorie, puis envoyer la réponse incorrecte ou erreur. S' il y a une catégorie, Alors je l'enverrai avec cette réponse. Donc ici, je l'ai fait rapidement. S' il n'y a pas de catégorie
, envoyez la réponse 500. Message à l'utilisateur indiquant que la catégorie avec l'ID donné n'a pas été trouvée. Et s'il y a une catégorie, alors je l'enverrai avec cette réponse. Testez ça avec Facteur. Donc, la liste des catégories est la version API une des catégories barre oblique et une demande get que j'envoie, mais je n'ai aucune catégorie. Ajoutons un. J' ai la demande de poste ici, et j'ai déjà le corps à celui-ci. Et ajoutons un autre comme la santé. Santé. C' est la fin. Nous devons donc maintenant revenir à la requête GET. Appelez-le à nouveau, j'ai deux demandes ou deux catégories. Obtenons cette catégorie uniquement par ID. Donc, je vais passer juste l'ID après l'URL. Je vais cliquer sur Envoyer. Et j'ai eu la catégorie détaillée ici dans ma demande d'API.
22. Catégorie de mise à jour: Bienvenue de retour. Maintenant, mettons-nous à jour la catégorie. Mise à jour de la catégorie signifie que nous allons mettre à jour soit le nom, la couleur ou l'icône. Les requêtes HTTP pour ce faire sont appelées Realtor dot put. Donc nous avons mis, je peux mettre à jour les données dans la base de données. Mais ici, c'est mélange entre obtenir les params et obtenir le corps, les params. Nous l'utiliserons pour obtenir l'ID du produit ou la catégorie que nous voulons mettre à jour. Et puis dans cette réponse ou le corps de la demande, Nous le ferons. Nous obtiendrons les données qui sont mises à jour. Donc, de la même façon ici, requête
asynchrone et la réponse seront une méthode ROM. Et puis je vais constante la catégorie dans une variable. Et puis je dirai attendre pour la catégorie et trouver par ID et mise à jour. Donc, je peux trouver le produit, puis notre catégorie, puis je le mets à jour. Donc, le premier paramètre de cette méthode est le point de requête powerapps dot ID. Donc, je dois passer l'ID, que j'ai obtenu de l'utilisateur. Et le deuxième paramètre est l'objet où contient les données mises à jour. Donc, la catégorie a un nom et une icône et une couleur. Donc, les obtenir à partir du corps de point de requête, nom de point. La même chose, exactement comme nous avons posté une nouvelle catégorie. Donc je vais le faire ici. Donc, si je reçois la catégorie, alors tout va bien et tout a été mis à jour. Si ce n'est pas le cas, il y a une erreur. Je vais donc mettre en œuvre cette logique. C' est exactement la même façon que nous l'avons dans le post. Donc, je vais copier la même chose et le mettre ici. Donc j'ai enregistré connecté à la base de données, et c'est l'état avec Postman. Nous avons donc ici la liste des catégories que nous avons créées auparavant. Maintenant, prenons cet ID et changeons cette méthode à un put. Et puis je passe la carte d'identité que j'ai. Et le corps sera différent. Par exemple, ici, nous avons l'ordinateur éléphant ordinateurs 11. Changeons-le, par exemple, pour élire par phonique. Et l'icône sera la même électronique, et la couleur est 55 quand j'envoie. Donc, ce que j'ai ici, c'est les anciennes données dans Node.JS. Il y a une option si vous voulez récupérer les anciennes données que vous envoyez, ou par exemple, qui était l'original de la catégorie ou les données actuelles que vous mettez à jour. Parce que si nous allons ici et appuyez sur get, nous verrons dans notre liste les données mises à jour. On aura ici, l'électronique. Mais ici, dans la requête PUT, nous avons renvoyé les anciennes données. Donc, dans ce cas, dans Node.JS, vous devez passer un paramètre à la recherche par ID et mise à jour, qui est appelé est l'objet bien sûr, et vous pouvez dire un nouveau passage. Donc ici, cela signifie que je veux retourner les nouvelles données mises à jour. Sauvegardons-le et essayons-le à nouveau. Alors on va au port. Par exemple, changeons-le à une autre chose, par exemple, la beauté. Et là, j'ai dit Beauty. Et je clique, puis j'ai obtenu les données mises à jour. Si je dis encore ici avec la liste, j'ai toutes les données mises à jour.
23. Publier une nouvelle API REST: Donc, dans cette conférence, nous allons voir comment poster un nouveau produit. Comme travailler avec des catégories. Nous allons également publier un nouveau produit. Nous avons donc juste besoin de collecter les champs, les mêmes champs qui sont envoyés par le front end. Puis ajoutez-les en tant que modèle de produit, puis enregistrez-les dans la base de données. Auparavant, nous avons fait cette partie. Alors refactorisons-le et réalisons-le avec notre modèle et avec notre base de données. Alors créons notre copie les champs que nous avions dans le modèle. Donc ici, je sens déjà les champs de ne pas prendre autant de temps à les remplir. Ils sont tous pareils. Ils viennent tous du corps. Réduisons aussi ici le code afin que nous puissions utiliser async et attendre. Donc ici, je vais ajouter async. Et puis nous allons vers le bas. Et nous disons, nous avons, par exemple, produit est égal à attendre et le produit que nous avons créé le modèle de produit dot save. Donc, nous avons ici maintenant le nouveau produit est créé après l'avoir sauvegardé. Supprimons donc cette partie. Et nous disons ici, s'il n'y a pas de produit, puis retourné en réponse, lecode d'
état est 400 ou 500,
que c'est comme une code d'
état est 400 ou 500, erreur de serveur interne. Puis envoyez un message indiquant que le produit ne peut pas être créé. Et si tout se passe bien, retournez le produit. Qu' est-ce qui est spécial ici ? La chose spéciale ici que vous pouvez poster le produit facilement, mais que faire si l'utilisateur ou l'avant et le centre sur la mauvaise catégorie ? Donc, par exemple, si j'ai un ID de catégorie et que l'utilisateur a créé l'ID de lui-même, et que cet identifiant de la catégorie n'existe nulle part dans la base de données. Donc, nous allons d'abord valider s'il y a une catégorie existe ou savoir. Pour faire ça. Nous pouvons la même chose, nous pouvons faire, catégorie const. Et dans cette catégorie, nous disons attendre un nouveau modèle de catégorie. Et trouver par ID. On l'a vu avant. Donc, je dis requête corps point, catégorie point. Donc, le frontal de la catégorie enverra l'ID de la catégorie que je veux ajouter au produit. Donc, ici, s'il n'y a pas de catégorie, puis retourner l'état du point de réponse, par exemple ,
400, que l'utilisateur a fait une erreur et qu'il envoie une catégorie non valide. Donc, en général, nous avons tous les champs et l'utilisateur doit envoyer la catégorie. Si tout est valide, il va continuer et ajouter leur produit normalement. Essayons ça avec Facteur. Donc, je vais à Postman et je crée une nouvelle API. Et le lien sera le même. Http et les catégories, pas les catégories. Nous avons besoin de produits. Donc stylo je pense que maintenant on peut ajouter le corps ici. Et ce pote sera la ligne de type. Et cette ligne n'est pas du texte, est JSON. Ainsi, l'extrémité frontale enverra le bloc adjacent au back-end. Donc, je l'ai déjà préparé à ne pas perdre de temps à taper ceci. J' ai donc le nom, la description et lire la description, l'image, la marque, le prix, la catégorie et la catégorie. J' ai obtenu la chaîne de la liste des catégories. Donc, si vous vous souvenez, nous avons deux catégories. J' en ai copié un et je l'ai ajouté ici. Et le stock de comptage est de 10. L' évaluation est pour pas tant de bon produit. Et des critiques. Le nombre de commentaires est 22. Et est-ce que c'est en vedette ? Oui, c'est vrai. Donc maintenant, lorsque j'envoie le produit, je recevrai la réponse du produit et avec un nouvel identifiant du produit. Vérifions la base de données Atlas. Voici Atlas et nous avons ici MongoDB, je recrée un rafraîchissement. Donc, nous voyons ici que le produit est déjà posté. Et nous remarquons que la catégorie a l'ID d'objet. Essayons maintenant d'envoyer une catégorie non valide. Donc, supprimons, par exemple ceci et faisons-le 80. Par exemple. Envoyez que j'ai une catégorie non valide. Et c'est os, c'est 400 mauvaise demande. Donc, la chose spéciale dans la publication d'un produit est seulement la façon dont nous l'avons lié à la catégorie. Vous devez donc valider chaque catégorie qui existe déjà dans la base de données, puis l'envoyer à la publication avec la publication du produit. De cette façon, vous aurez un produit valide qui est vraiment lié à une catégorie.
24. Obtenir un produit et une liste de produits REST API: Lorsque nous préparions notre API, nous avons fait une demande get pour une liste de produits. Donc, comme nous le voyons ici, la liste des produits est sauvegardée avec find. Et puis nous le retournons à l'avant que. Alors essayons ça avec nos changements. Avec Facteur. Je vois ici le produit, je change le poste pour obtenir. Et nous voyons que nous avons un tableau et une liste de produits. C' est très simple. Nous allons créer une requête GET uniquement pour un produit. Ce sera exactement le même que obtenir la liste des produits, comme nous l'avons vu auparavant. Nous avons juste besoin ici d'ajouter le paramètre ID. Et changeons ce nom en produit. Et maintenant, s'il y a un produit, alors s'il n'y a pas de produit, désolé. Donc, vous renvoyez une erreur. S' il existe un produit, envoyez-le à nouveau à l'interface frontale ou à l'API. Mais ce que nous devons changer ici n'est pas très bien, mais trouver par ID. Et l'ID, comme nous l'avons vu précédemment, vient de la requête regardé par le ou, para-point
désolé, parce que nous avons les paramètres dans l'URL, l'ID. Sauvegardons et essayons. Maintenant. Je copie, par exemple, un des ID que j'ai ici pour les produits, et je l'ai mis ici après le produit. J' ai donc la carte d'identité ici. Et je dis, je comprends, puis j'ai obtenu les détails du produit exactement comme ici. Je voudrais mentionner ici que, par
exemple, dans la liste des produits, parfois si j'ai une grande liste de produits, je n'ai pas besoin d'envoyer toutes les données. Par exemple, si je veux que le frontal affiche uniquement le nom et l'image du produit. Donc, je crée une API spécifique qui ne
renvoie que la liste des noms et des images des produits. Essayons ça maintenant. Donc toujours, après que nous avons trouvé ici, trouver la méthode, si je clique sur point, alors je trouverai une méthode appelée select. Donc, c'est exactement comme sélectionner une requête. Donc, je peux passer ici quels champs je veux afficher. Donc, je dis par exemple, je n'ai besoin que du nom. Donc, disons ici le nom dans une chaîne et enregistrez-le. Donc, ici, nous allons supprimer le produit unique et nous obtenons une liste. Et nous voyons ici, nous avons la liste des produits et seulement les noms si nous voulons, par
exemple, le nom et l'image. Donc, je vais à cette chaîne et j'ajoute seulement de l'espace. Et puis le champ que je veux afficher, par
exemple, je dis image, puis j'enregistre. Allons chez Facteur et nous aurions l'image et le nom. Nous remarquons ici qu'il y a ID, donc nous pouvons également exclure cet ID. Comment nous pouvons faire ça. Nous allons aussi à la même chaîne, et nous avons l'ID dans ce cas. Donc je peux dire moins la carte d'identité. Donc, quand j'appuie sur Enregistrer, je vais voir Postman, envoyer cette demande. J' ai maintenant une sélection propre. Ainsi, vous pouvez créer vos API avec plus de performances et plus efficaces. Donc, vous n'avez pas d'obstacles dans les mémoires pour charger le client. Vous avez besoin d'une liste de produits. Envoyez ce dont vous avez besoin. Vous pouvez donc créer une API spéciale pour cela. Vous pouvez donc envoyer ce que vous voulez via cette API.
25. Afficher les détails du cours dans le produit: Donc, comme nous l'avons vu précédemment, que nous obtenons un seul produit de cette façon. Donc, mais le champ de catégorie est seulement l'ID. Si je veux, par exemple, afficher le produit avec le nom de la catégorie. J' ai donc, par exemple, le détail du produit, mais je veux aussi montrer leur nom. Donc, ce n'est pas agréable d'aller et d'obtenir une autre demande pour la catégorie, puis de fusionner ces deux demandes ensemble et de montrer au front ce dont j'ai besoin. Il y a une très belle façon de le faire dans MongoDB et Mongoose. Donc, après avoir trouvé par la méthode ID, quand j'appuie sur point, je les vois MSO il y a remplissage. Remplir signifie que tout ID ou
champ connecté à une autre table sera affiché sous forme de détail dans ce champ. Donc quel champ est a, par
exemple, ID, qui est lié à une autre table, comme nous l'avons vu précédemment dans le schéma que nous avons ici, nous avons créé la catégorie est l'ID d'objet et la catégorie de référence. Donc, cette catégorie est en fait ID comme nous l'avons vu auparavant. Donc, je dis un remuant peupler. Catégorie. Je vais à Postman, puis je clique sur Envoyer. Je vois que j'ai eu les détails de la catégorie. Donc, ici de cette façon, lorsque je crée une requête GET pour un seul produit, je suppose que je suis dans une page de produit. J' envoie une demande pour obtenir le détail du produit, puis j'obtiens également le détail de la catégorie afin de pouvoir les afficher également dans la page du produit. Il fonctionne également avec la requête GET. Donc, ils obtiennent en général. Donc, si je veux ici avoir toutes les listes remplies, donc je dis juste remplir la catégorie de toutes les listes de produits. J' appuie sur Sauvegarder, allez au Facteur. Je reçois la liste des produits et les IC déjà remplis. Certains d'entre eux, ils ne sont pas connectés à une catégorie. Ils sont auparavant nous les avons créés. Donc, ici, par exemple, ce produit, il a une catégorie et il est connecté à une catégorie dans la base de données. Donc, en résumé, si quelqu'un vous demande comment je peux connecter des tables MongoDB ensemble comme une base de données relationnelle, je crée juste un champ dans la table d'origine. Et puis je dis dans ce champ que je veux un ID d'objet et il est référencé au schéma que j'ai créé pour l'autre table. Et puis quand je crée une requête GET, je dis remplir ce champ. Donc, ce champ doit être un ID, puis il remplira ce qui est lié à cette table.
26. Mise à jour d'une API REST: Maintenant, mettons-nous à jour notre produit. mise à jour d'un produit est exactement de la même façon que nous avons mis à jour une catégorie. Mais comme nous l'avons vu dans le post, nous avons seulement besoin de valider la catégorie. Bien que nous
allions aux catégories, copions toute la requête PUT serait exactement la même. Et puis je vais au produit, j'ajoute la nouvelle route. Et ici, nous avons produit ou mis ID. Et puis nous ferons la même chose, ce
que nous avons fait pour la catégorie. Alors changeons ceci en produit. Voici le produit, modèle de produit. Rechercher par ID et mettre à jour. Nous avons le périmètre demandé params ID et je vais obtenir les champs d'ici. Copiez-les de la même manière et collez-les ici. Donc, nous avons tous les champs du produit, nouveau. Oui, nous voulons retourner le nouveau produit. S' il n'y a pas de produit, envoyez une demande incorrecte ou une erreur de serveur interne, puis dites que le produit ne peut pas être optimiste. Et aussi, si tout va bien
, renvoyez le nouveau produit. Nous manquons seulement maintenant la partie où nous aurions besoin de valider la catégorie. Donc encore ici, nous avons la même chose ici. Et puis je dis coller la catégorie de coût, et puis je demande la catégorie. Et si ce n'est pas une catégorie, envoyez une catégorie non valide à l'utilisateur. Essayons maintenant avec le Facteur. Je vais chez Facteur, copions ou nous avons déjà les champs ici. Pour que nous puissions changer ça, mettre. Et ici, je passe l'idée que je veux changer. Donc, je dis ici, par exemple, cet ID. Et puis changeons le produit en un nouveau. Et ici aussi description vous et Ford exemple. Mettons à jour le prix 32. Et c'est tout. Nous envoyons la demande de poste et nous avons eu une erreur ici que c'est une catégorie invalide. Alors faisons la bonne catégorie. Donc, nous allons ici à l'API catégories et ramasser la bonne et mise à jour ici. Et ils envoient, nous avons encore eu le nouveau produit. Donc, nous voyons ou entendons le produit nouveau et la description est en U et avec le nouveau prix. Donc la seule chose que nous avons fait ici que nous aussi, nous avons validé la catégorie. Donc, à l'avant, comme nous le verrons plus tard, que nous aurons Forum du produit. Donc, quand je clique sur Modifier, alors je vois les champs déjà remplis. Donc, je viens de mettre à jour les champs dont j'ai besoin, puis j'envoie cette demande à nouveau. Vérifions aussi la base de données si tout est mis à jour. Et puis je reçois la liste des produits. Et je vois ici le produit a une nouvelle description et un nouveau nom. Et bien sûr aussi alors votre prix.
27. Supprimer une API REST: La suppression d'un produit est également la même façon que nous avons supprimé une catégorie. Mais ici, je veux mentionner un point qui est très important pour valider notre API. Copions d'abord aussi que supprimer les demandes des catégories. Je vais prendre celui-ci et ensuite le coller ici dans l'API de produit ou les itinéraires de produit. Nous remplaçons tout au produit. Tout est remplacé. Donc, nous avons maintenant tous les États. Et essayons-le maintenant. Prenons une liste de produits. Will obtenir nous avons tous ces produits. Retirons les anciens parce qu'ils sont vides. Ainsi, nous pouvons sélectionner l'un des ID, changer ceci pour supprimer, et envoyer cette demande. Maintenant passe à travers et le produit est supprimé. Ce que je veux mentionner ici est une chose très importante. Et si j'envoie une mauvaise carte d'identité comme celle-ci ? Je vais voir que je vais obtenir une erreur que l'ID de l'objet n'est pas valide. Nous devons donc également valider l'ID d'objet dans toutes les demandes. Donc, dans ce cas, nous avons attrapé une erreur. Mais ici, dans la requête PUT, cette requête, il n'y a aucune capture de l'erreur. Nous vérifions simplement si nous recevons un produit ou non. Mais ici, il vérifie l'identité, donc il va pendre d'une manière ou d'une autre. Donc, changeons cela à la requête PUT et faisons un problème dans le, dans l'ID. Par exemple, je supprime celui-ci, puis j' envoie une demande et je vois que le backend est suspendu. C' est pour ça que je préfère plus de cette façon, la façon de la promesse. Donc je peux toujours dire ce que je peux voir, ce que je peux obtenir et ce que je peux attraper. Mais si vous voulez garder cette façon, sorte que nous ne pouvons pas non plus valider seulement la catégorie. Nous pouvons valider l'ID. Comment peut-on faire ça ? L' ID doit être le type d'ID d'objet qui est stocké dans Mongoose. Donc ici, je vais commencer d'abord à faire une constante. Exiger la mangouste. Cette Mongoose constante. Il a une méthode où je peux l'utiliser dans la requête PUT. Donc, je ne peux pas dire que le point Mongoose est un ID d'objet valide, donc je peux passer alors l'ID de point de point params de requête. Donc, si cela est valide, alors je continue. Si ce n'est pas le cas, je retourne une réponse à propos de l'erreur. Donc, comme nous le voyons ici, cela revient un booléen. Alors mettons-le à l'intérieur d'un if. Donc je dis ici si Mongoose. Donc, je vais envoyer aussi une mauvaise demande de cette façon et je dis ID de produit non valide. Et dans ce cas, le produit ou l'API retournera pour moi une erreur lorsque je transmets ID. Essayons maintenant. Nous avons une mauvaise carte d'identité. Je vois que je n'ai renvoyé aucune erreur. C' est parce que j'ai dit si est valide puis retour erreur, donc je n'aurais pas dû être valide, donc j'ajoute pas. Alors revenons à nouveau et envoyons la demande à nouveau. Et je reçois l'erreur ID de produit non valide.
28. Obtenez un compte des produits pour des objectifs de statistique: Bienvenue de retour. Parfois, dans le panneau d'administration, je veux montrer à l'administrateur combien de produits j'ai dans la base de données. Donc, dans ce cas, je veux voir une API qui
me donne tous les produits ou combien de produits j'ai dans la base de données. Donc, il ne retournera qu'un nombre. Mongoose a beaucoup de méthodes. Donc, en fonction de ces méthodes, vous pouvez renvoyer n'importe quelle requête que vous voulez avec une API. Par exemple, dans Mongoose, vous pouvez avoir à partir du produit modèle n'importe quelle méthode que vous souhaitez retourner. Ainsi, vous pouvez créer votre propre API en fonction de ce que Mongoose vous fournit. Je ne compterai pas les produits. Je veux le prix total de mes produits. Je veux, par exemple, total ou le prix des commandes, le total des ventes, toutes les statistiques que je veux avoir dans mon front end, par
exemple, je veux avoir le panneau d'administration. Dans le futur. Je vais vous le montrer avec quelques statistiques. Donc, pour cela, vous devez créer une API, qui est obtenir normalement ce que vous voulez de la base de données. Alors ajoutons un nouveau ici,
comme le point de routeur get. Ce serait GetMethod bien sûr. Et puis dites, par exemple, obtenir le nombre de slash. Donc, l'API sera après que les produits soient comptés. Donc, le deuxième paramètre, il sera le même que getMethod. Alors copions celui-ci de la même façon et changez la route là-bas. Donc, je dis get count, j'ai une réponse asynchrone et ici je dois changer en fonction de ce que Mongoose me donne. Donc, nous créons une constante, appelez ça le nombre de produits. Et ici, je supprimerais jusqu'à la fin et dire par exemple, il y a un ensemble de méthodes documents de comptage. Donc, je veux voir combien de documents dans ce modèle ou dans ce tableau. Donc, comptez les documents et puis il retournera le nombre ou comme un rappel. Et puis je dis juste de retourner le compte. Donc, je reçois le compte et je le rends. Et puis les documents de comptage ont été retournés pour moi, le nombre de produits. Donc, ici, je dis, s'il n'y a pas de nombre de produits et puis retourner une erreur à l'utilisateur, sinon, envoyer le nombre de produits. C' est ça. Normalement, nous retournons un JSON. Donc, par exemple, je dis ici, nombre de
produits est un nombre de produits, ou par exemple, je dis que seul le nombre est le nombre de produits. Vous avez la liberté de choisir n'importe quel nom. Je préfère celui-là. Essayons que nous supposons homme, je vais à Postman et puis je dis produits GET méthode, obtenir compter. Et nous exécutons ça. Et nous voyons que le nombre de produits est de trois, donc c'est vraiment trois. Vérifions ça. Oui, j'ai 1, 2, 1, 3 1. C' est cool. Donc, nous pouvons maintenant montrer à l'administrateur quels produits ou combien de produits il a dans son discours.
29. Obtenir les produits caractérisés: Une autre demande de statistiques peut être, par exemple, je veux les produits en vedette, comme comment nous voyons ici dans la page d'accueil de ce site. Nous voyons des produits en vedette qui sont toujours affichés sur la page d'accueil. Donc, précédemment dans le modèle de produits, nous avions quelque chose ou un domaine appelé est en vedette. Est présenté a une valeur booléenne comme true ou false. Cela signifie que ce produit doit être affiché sur la page d'accueil ou non. Maintenant, faisons une API pour obtenir uniquement les produits en vedette. Et pour le rendre plus complexe, nous pouvons avoir des comptes. Ainsi, par exemple, je peux obtenir trois produits en vedette ou trois derniers produits en vedette ou six derniers produits en vedette. Faisons-le maintenant. Donc, toute requête GET est comme commencer par router.get. Copions donc celui-ci et construisons notre API en vedette. Ou au lieu de compter, nous dirons obtenir des produits
en vedette, par exemple. Donc, à Mongoose, nous devons trouver les produits en vedette. Seulement, pas tous les produits, seulement celui présenté. Donc, je dis ici, produits dot trouver. Et comme vous vous en souvenez, nous avons eu un peu de filtration. Nous venons d'en parler, mais nous verrons comment construire un filtre avec le produit. Donc de toute façon, donc maintenant je trouve qu'il accepte comme un objet et ensuite vous pouvez définir quels champs sont requis pour être la valeur. Donc, par exemple, je dis est présenté doit être un vrai. Donc, tous les produits qui a présenté à travers, alors je vais les obtenir. Donc ici tout reste le même est acte que l'objet. Donc ISA ici vient de revenir pour moi les produits. Donc, je dis ici produits, produits, produits. Maintenant vérifions ça avec Facteur. Je vais ici, je dis Get fonctionnalité. Donc, nous envoyons et nous avons obtenu un
seul produit en vedette parce que nous n'avons qu'un seul produit en vedette dans notre API, donc dans notre base de données. Donc si nous vérifions ici, donc le premier a, est faux. Le second est également faux, mais le dernier est présenté. Ok, donc maintenant je ne veux pas sentir ma page d'accueil qui a présenté le produit par exemple, j'ai comme cette page par exemple, j'ai 200 produits de fonctionnalités. Donc, je ne vais pas seulement, par
exemple, cinq produits. Pour ce faire, nous pouvons également mériter une certaine limitation de notre API en fonction de ce que l'utilisateur envoie. Par exemple, je peux ajouter ici, comme nous l'avons vu avant, nous pouvons ajouter n'importe quel paramètre comme avant, nous ajoutons un ID. Mais ici, nous pouvons ajouter le nombre par exemple. Et là, j'aurai ce compte. Count est égal à demander les paramètres car son paramètre et son nombre. Donc, s'il y a un nombre de points de requête ou demander un nombre de points de params de couple, si l'utilisateur passe quelque chose, alors obtenez-le. Si ce n'est pas le cas, retournez 0. Donc c'est comme si ici. Donc, s'il y a compte passé avec l'API, alors obtenez-le. Si ce n'est pas le cas, retournez 0. Donc ce nombre peut être cette valeur ou cette valeur. C' est exactement comme l'instruction IF. Alors comment nous allons utiliser ce compte ? C' est très simple. Après avoir trouvé ce que je veux, seul le produit en vedette, je dis nombre de limites. Essayons ça avec Facteur. Nous disons d'être en vedette. Et puis le compte que je veux par exemple trois, alors je vais envoyer cette demande. Nous ne le ferons pas, c'est qu'il est suspendu. Il y a donc une erreur. Vérifions quelle est l'erreur. L' erreur est de dire ici que le champ incapable d'analyser les
produits de recherche est présenté par la limite de rejet trois, Return key false. Alors pourquoi ça se passe ? Champ limite doit être numérique, mais nous l'avons numérique ici. Parce que, parce que ici, ce nombre de points powerapps point de requête renvoie, comme vous le voyez ici, une chaîne. Et ce sera aussi une chaîne. Donc, nous avons ici une valeur de chaîne, pas un nombre, parce que limite demande un nombre. Donc, pour le changer facilement en un numéro, il suffit de placer un plus derrière cette boisson. Donc maintenant, après avoir sauvegardé et redémarré, le serveur, demande notre API. Nous obtiendrons le produit en vedette.
30. Filtrer et obtenir des produits par catégorie: Continuant avec le filtrage, Nous allons également filtrer par catégories. Ainsi, lorsque l'utilisateur sélectionne certaines catégories spécifiques, il obtiendra les produits qui sont dans cette catégorie. Et c'est un filtrage normal dans chaque atelier. Donc, nous devons en quelque sorte ajuster la requête GET ou obtenir demande de liste de
produits pour avoir un filtrage par catégorie. Mais d'abord, je dois parler de quelque chose que nous avons vécu auparavant. Deux types de paramètres que nous pouvons envoyer au backend. Le premier est le paramètre URL. Ainsi, l'utilisateur peut envoyer n'importe quel ID après qu'ils, vous êtes malade ou dans le paramètre body. Donc on a un corps. Et à l'intérieur de ce corps il y a quelques paramètres, et aussi avec l'URL. Nous avons donc un autre type de transfert de valeurs au backend, qui est appelé paramètres de requête. Les paramètres de requête sont toujours utilisés. Dans ce cas, par exemple, j'ai URL API, URL localhost, puis je passe le paramètre de requête. Le paramètre API est passé comme ceci, donc je peux passer ici le numéro, mais le paramètre de requête va toujours après un point d'interrogation. Donc, je ne peux pas toujours dire que j'ai besoin ici d'une catégorie. Donc, comme nous l'avons vu auparavant, nous pouvons également filtrer dans la méthode find. Donc, après avoir passé le modèle et ensuite trouver, nous pouvons passer l'objet comme nous l'avons fait auparavant. Comme est présenté comme l'un des champs doit avoir cette valeur. Mais maintenant, faisons-le comme catégorie. Donc cette recherche, nous devons avoir la catégorie et avec un ID spécifique qui est passé par l'utilisateur. Mais comment nous pouvons en faire plusieurs valeurs, parce que ici je ne peux avoir qu'une seule valeur. C' est très simple. Vous pouvez simplement passer un tableau et automatiquement mongoose
réalisera que toutes ces valeurs doivent être dans cette catégorie. Et puis cela retournera les bons produits qui ont ces meilleures catégories. Donc, je ne peux pas dire ici quelque chose comme ça, première catégorie et deuxième catégorie ID. Alors faisons-le ici comme quelque chose de différent. Donc, pour être plus différent. Donc maintenant, nous devons prendre en quelque sorte ce param de requête et le diviser en un tableau, puis le passer à cette recherche. Donc c'est très simple. Je dis s'il y a des catégories de points de
requête, jquery, qui est celle-ci, alors stockons dans une certaine constante. Const, par exemple, filtre. Et ce filtre, nous aurons les catégories de requête point de requête de valeur. Et nous diviserons cette valeur. Donc nous le divisons par virgule. Donc, nous disons
diviser, diviser la chaîne en fonction de la virgule, puis il reviendra pour moi aux éléments du tableau, qui est une chaîne et l'autre. Donc simplement, nous pouvons placer cette variable ici parce que nous l'avons divisée en tableau. Mais à cause de la portée en JavaScript, nous ne pouvons pas attribuer cette valeur ou utiliser la valeur hors de cela si, parce que d'autres champs ne peuvent pas la voir. Il est donc préférable de créer la variable ici et de la donner comme tableau vide. Et cette variable, je lui assigne la scission, et puis je l'utilise ici. Essayons ça avec Facteur. Alors je vais ici et j'ai essayé d'obtenir le produit. Je ne reçois rien parce que je forçais l'API à avoir une catégorie. Donc, quand il n'y a rien, alors il doit avoir une catégorie. Donc, nous allons avoir comme une façon plus dynamique. Je fais ça comme un objet vide. Et cet objet vide sera affecté et a la valeur quand il y a des paramètres et ou des paramètres de requête. Alors dis que je dis que la catégorie est ceci. Et puis ce filtre, je supprime tout cet objet et puis il sera passé à l'amende. Donc, quand il est vide, il n'y a rien. Donc, je vais obtenir toute la liste du produit. Et quand il y a des paramètres de requête, il serait rempli de catégorie, ce qui est notre condition, et il aura cette valeur de l'utilisateur. Essayons encore ça. Maintenant. J' envoie cette demande, gentil. J' ai eu tous les produits précédemment. J' ai créé certains produits, par exemple, le produit 1 et le produit 2 et le produit 3. Et ils ont de différentes catégories, par
exemple, cette catégorie et cette catégorie. Donc je dis ici, catégories de points d'interrogation. Et la valeur de ces catégories. Prenons la première catégorie. Par exemple, celui-ci. Et j'envoie, et puis j'ai eu deux catégories ou deux produits. Donc, ces deux produits, ils appartiennent à cette catégorie. Ajoutons un autre. Par exemple, le second, en les fractionnant par une virgule. Alors je dis ici. Donc on en a 123. Le premier produit est de la deuxième catégorie, et les deux autres produits, ils appartiennent à la première catégorie. Et quand je ne passe rien, alors cela fonctionnera normalement pour obtenir toute la liste des produits. Donc, ici, l'utilisateur a la possibilité de passer les paramètres de requête ou non. Donc maintenant sur ma page d'accueil, je peux avoir, par exemple, quelques bannières qui affichent des produits spécifiques de catégories et aussi l'utilisateur quand il va sur la page produit, vous pouvez également filtrer ces produits par catégorie. Par exemple, ce sera quelque chose comme des cases à cocher ou par exemple, des pilules. Il peut donc cliquer dessus et sélectionner les catégories pour lesquelles vous souhaitez afficher les produits.
31. Changer la touche « _id » pour « id » - Plus d'amitié du frontend: Lorsque je reçois un produit ou une liste de produits, Mongoose ou MongoDB envoie le champ avec le droit comment je les ai fait. Mais l'ID, il a un petit problème. Il a ce trait de soulignement. Je veux que l'ID soit seulement ID en tant que clé, donc je peux l'utiliser partout dans mes applications, pas seulement, par exemple, pour l'application que nous faisons dans ce cours. Donc, je peux utiliser ce backend avec d'autres applications qui acceptent généralement l'ID uniquement comme une clé. En quelque sorte. Mongoose, nous pouvons également copier cet ID et créer un champ appelé ID uniquement sans trait de soulignement. Alors, comment faire ça ? C' est ce qu'on appelle les virtuels. Donc, avec ce schéma de produit, que nous avons créé auparavant, nous pouvons toujours créer un identifiant virtuel. Et cet identifiant virtuel aura un get. Et ce get sera à partir de l'ID qui est passé dans le schéma du produit. Donc, c'est un moyen de le faire et de chaîne hexadécimale parce que nous avons des chaînes hexa pour l'ID, qui est appelé ID d'objet. Et puis nous devons activer une option pour le schéma de produit. Et dites que lorsque je veux envoyer une certaine valeur au frontal ou à l'API, nous activons les virtuels car il s'agit d'un champ virtuel. Donc, dans chaque schéma, nous pouvons ajouter ces deux ou quatre lignes ou deux méthodes. Et puis nous aurons la carte d'identité. Donc si nous essayons maintenant avec le Facteur, je peux envoyer. Et je dirai que j'aurai la pièce d'identité originale et la pièce d'identité que je veux. Donc centre commercial front end convivial, je peux utiliser cet ID directement sans ce trait de soulignement gênant.
32. Introduction: Maintenant, nous arrivons au dernier module, qui concernait le dos et le développement. Nous devons maintenant télécharger les images avec notre produit, comme nous l'avons vu auparavant, le produit contient deux champs. L' un d'eux est une image principale et le second champ est les images. Alors, où sera plus de description sur le produit comme une galerie d'images ? Donc, dans ce module, vous verrez l'étape principale est l'installation de la bibliothèque Walter. Library est une bibliothèque célèbre utilisée pour télécharger des fichiers sur le serveur à l'aide de Node.JS. Et dans la deuxième étape, nous trouverons la meilleure configuration pour notre e-Sharp car nous devons configurer cette bibliothèque pour utiliser et télécharger les fichiers sur notre serveur. Le troisième, nous allons voir comment utiliser la destination et téléchargé les noms de fichiers. Toujours lorsque l'administrateur télécharge un fichier ou une image, il doit spécifier le nom du fichier. Mais non, nous ne pouvons pas le faire pour l'administrateur ou pour l'utilisateur. Nous n'avons pas à le laisser nommer le dossier. Vous pouvez télécharger n'importe quel fichier et il sera codé dans notre serveur. Utiliser Postman est également très important pour notre cas ici pour tester le téléchargement d'image, nous allons voir comment tester le téléchargement d'image avec un facteur en utilisant le téléchargement d'un fichier ou plusieurs fichiers. Et nous ne permettons pas à l'utilisateur de télécharger quoi que ce soit. Nous avons besoin qu'il télécharge uniquement des types spécifiques d'images, comme avec l'extension PNG pour J Beck. Et bien sûr, tout cela fait pour un seul fichier. Maintenant, nous devons étendre la bibliothèque pour permettre de télécharger plusieurs fichiers. Et plusieurs fichiers sont nécessaires pour que nous puissions télécharger de nombreuses images pour la galerie de produits. Et enfin, nous allons voir comment récupérer ce produit avec les images et les images de la galerie pour les voir en avant. Bien sûr, nous allons chercher seulement l'URL de l'image. J' espère que vous apprécierez ce module et vous verrez dans la prochaine conférence où nous allons commencer à installer la bibliothèque de mortier.
33. Modèle et schéma des utilisateurs: Comme nous l'avions dans notre modèle d'utilisateur avant, nous voyons que nous avons besoin d'un nom, d'un e-mail et d'un mot de passe, etc. Donc, nous allons construire notre schéma d'utilisateurs exactement comment nous l'avons dans ce modèle. Sur la droite. Je les ai déjà écrites pour qu'on puisse les examiner rapidement. Et puis vous pouvez implémenter à partir du code que je vais télécharger dans les ressources. abord, le nom de l'utilisateur est une chaîne et il est obligatoire. Deuxièmement, l'e-mail est une chaîne et également vrai requis. Et aussi le hachage du mot de passe. Nous avons dit que nous allons enregistrer le mot de passe haché dans la base de données. Ce sera une chaîne et c'est nécessaire. Le numéro de téléphone de l'utilisateur sera également une chaîne ou un nombre. Et avec le vrai et c'est nécessaire. Ici, nous allons identifier l'utilisateur s'il est administrateur sur la boutique ou non. Donc, ce sera un booléen et la valeur par défaut est false. L' adresse qui sera utilisée pour l'expédition de la commande de l'utilisateur. Donc, nous pouvons utiliser une rue comme une chaîne, et la valeur par défaut est vide. L' appartement est également String. Le code postal est une chaîne, une ville et un pays. Et à la fin, nous avons un schéma utilisateur, comme nous l'avons fait précédemment avec les produits, nous avons créé un identifiant virtuel. Donc nous aurions une pièce d'identité de cette façon, pas de cette façon. Il est donc plus convivial pour l'utilisateur ou le front end. Ainsi, nous pouvons l'utiliser dans le front end comme un ID normal pour récupérer les données utilisateur ou identifier un utilisateur. Et ici, nous activons les virtuels pour le schéma. Et voici l'exportation normale du module et du schéma. Donc, tout est sur le schéma utilisateur. Nous allons maintenant créer un utilisateur ou un utilisateur enregistré dans notre boutique en ligne.
34. Enregistrer une nouvelle API REST: Dans cette conférence, nous allons voir comment enregistrer ou poster un nouvel utilisateur comme n'importe quelle demande de poste. Nous pouvons également publier les données de l'utilisateur dans le corps de la demande, puis les soumettre à la base de données. Donc, pour le rendre rapide, Copions une de la demande de poste que nous avons avant, par
exemple, la catégorie. Copions donc celui-ci, puis collez-le dans notre module de routes utilisateur et commençons à ajouter les demandes de corps basées sur le modèle que nous avions auparavant pour l'utilisateur. Donc nous allons sentir tous ces champs comme nous les avons obtenus de l'extrémité frontale comme d'habitude et les coller ici dans notre demande. Donc, tout d'abord, je vais ajuster ceci pour être utilisateur. Et ici, nous utiliserions le modèle utilisateur. Et puis j'attendrai pour enregistrer l'utilisateur. Et puis s'il n'y a pas d'utilisateur, puis répond avec l'erreur que l'utilisateur ne peut pas être créé ou enregistré. Alors ajoutons les champs dont nous avons besoin maintenant. Donc, je vais séparer ces deux écrans et ensuite j'ajouterai mes champs ici. Alors le nom, le même nom. Et l'e-mail sera un e-mail. Et voici l'e-mail du corps. Faisons vite pour le reste. Maintenant, notre nouveau modèle utilisateur ressemblera à ceci. Donc j'ai mis toutes les clés ou tous les champs, que je les ai obtenus du schéma. Et là, j'ai supposé que je recevais ça du corps de la demande. Donc, ce copain et la demande proviendront du facteur ou de l'avant. Comment nous verrons ensuite. Essayons ça avec un facteur maintenant. Donc, nous allons créer un objet, par exemple, et j'affecterai un utilisateur et un hachage de mot de passe et toutes ces informations dans cet objet. Alors, quelle sera l'itinéraire complet pour ça ? Ce sera la route de l'API, puis les utilisateurs. Pourquoi ? Parce que dans le app.js, nous avions avant, toutes les routes API sont définies ici. Je dis donc AP produits US, puis j'attribue les itinéraires de produits. Et puis ici, nous aurons des utilisateurs. Donc, dans notre API, nous allons utiliser les utilisateurs. Donc, en allant à l'extrémité frontale, Copions une des API que nous avions avant et collez-le ici. Et ici. Au lieu de produits, nous dirons les utilisateurs. C'est parfait. Alors ajoutons un post. Et puis dans le corps, nous allons ajouter une rangée. Et le type de cette ligne est JSON, car l'utilisateur enverra les données dans un format JSON. Et puis créons notre objet ici. Donc je dirais le nom, et j'attribue n'importe quel nom, par
exemple, James, et la même chose pour le reste. Alors sentons-les. Donc, nous avons ici le hachage de mot de passe,
le numéro de téléphone , l'administrateur, Oui ou non, appartement, code postal, ville et pays. Donc, dans ce cas, nous aurons un utilisateur qui a ces propriétés. Nous ne devrions pas mettre le mot de passe comme ça. Nous devons donc le hacher, comme nous le verrons dans la prochaine conférence. Donc je pose les données maintenant et j'ai toutes ces informations. Nous avons donc ici nom que nom d'utilisateur, et les données et toutes les informations que nous avons entrées. Et aussi l'API a répondu avec ID et ID de soulignement. Ainsi, l'utilisateur a créé dans la base de données. Vérifions notre base de données sur Atlas. Donc, quand nous allons à notre cluster et ensuite les collections, j'accède à notre base de données, qui est les utilisateurs ou la base de données e-shop et les utilisateurs de la table. Et nous verrons que l'utilisateur est créé ici. Je pense que j'ai manqué un champ qui n'est pas envoyé avec l'API, donc nous devons l'ajouter. Alors ajoutons ça ici, qui est la rue. Donc on en a mis trois aussi, et c'est 3s. Par exemple, 100. Je vais ajouter différents utilisateurs avec des noms différents pour sentir notre base de données. Donc, je dirai James, par exemple, je dirais Tom et Tom ici. Et le même mot de passe, Supposons qu'il a 777 ici et la même adresse par exemple. Et nous allons envoyer, envoyer. Nous aurons aussi la même chose que aussi un autre utilisateur comme Mike. Nous aurons ici, Mike petit m. et aussi la même information comme disons ici 88. Et le numéro de rue, par exemple, cinq, l'appartement est 4. Donc, dans ce cas, dans notre base de données, nous avions trois utilisateurs. Comme nous le verrons ici. Je rafraîchis la page. Et nous verrons ici que nous avons trois utilisateurs.
35. Ajuster le mot de passe de l'utilisateur: Enregistrer le mot de passe, dans ce cas comme un texte brut n'est pas sécurisé parce que si quelqu'un a obtenu notre base de données, il verra la liste de tous les mots de passe de tous les utilisateurs dans notre base de données. Donc, il vaut mieux en quelque sorte le hacher ou encodé en quelque sorte afin que tout le monde ne puisse pas comprendre ce qui est, le vrai mot de passe derrière ce hachage ou il est codage. Pour ce faire, il y a une bibliothèque, elle est fournie par NodeJS. Ça s'appelle décrypter les js. Nous pouvons l'installer ici dans une nouvelle fenêtre. Donc MPM installer être saisi JS. Et je vais installer cette bibliothèque, puis l'importer dans mon application. Donc, je dirais causé, être saisi et exiger déchiffrer JS. Alors comment nous allons utiliser cette bibliothèque ? Donc, je ne demanderai pas à l'utilisateur ou au frontal un hachage de mot de passe. Je vais demander un mot de passe normal, mais en interne dans mon backend, je vais crypter ce mot de passe. Donc ici, je vais dire être point crypte, synchronisation de hachage. Et puis Hash Sync demandera une chaîne et aussi quelque chose appelé sel. Le sel est, par exemple, comme des informations supplémentaires, extra secrètes afin que toute personne ne puisse pas déchiffrer ce hachage. Donc, par exemple, je vais ajouter ici mon secret. Vous pouvez ajouter n'importe quel secret. Par exemple, vous pouvez dire ma cigarette. Vous pouvez ajouter n'importe quoi. Je vais ajouter ici, par exemple, le nombre, c'est 10. Et je ne demanderai pas à l'utilisateur un hachage de mot de passe, mais je lui demanderai simplement un mot de passe. Essayons cela maintenant et voyons ce que le serveur ou le backend nous répondra après avoir crypté le mot de passe. Donc, ici, créons un autre mot de passe utilisateur, pas un hachage de mot de passe. Donc, ce sera de un à six aussi. Et il a des informations comme nous l'avions auparavant. Ne le faisons pas administrateur par exemple. Et je vais envoyer, et nous verrons ici le hachage de mot de passe comme ceci. Donc, ce n'est pas exactement ce que l'utilisateur a envoyé. Donc, nous allons utiliser en quelque sorte quand nous nous
connectons, nous allons comparer ce hachage avec le mot de passe que l'utilisateur a utilisé lorsqu'il s'est verrouillé. Ceci est également fait par la bibliothèque de décryptage. Donc, maintenant, nous avons un back-end sécurisé ou un objet sécurisé de l'utilisateur afin que personne ne puisse résoudre ou déchiffrer ces informations.
36. Obtenir l'utilisateur et la liste des utilisateurs en termes de suppression du mot de passe: Comme nous l'avons vu précédemment, que nous avons créé la requête GET pour obtenir la liste des utilisateurs. Et aussi, nous pouvons créer la même chose pour obtenir un seul utilisateur. Donc, en le copiant à partir de catégories aussi. Et je vais changer cette catégorie d'utilisateur. Donc, de cette façon, nous avons une liste d'utilisateurs et obtenir un seul utilisateur. Essayons ça avec un Facteur. Je vais ici et je n'aurai pas un utilisateur qui a son ID. Il y a comme ça et je ne vais pas liste d'utilisateurs. Alors je les ai comme ça. Nous avons un problème de sécurité ici. Je ne veux pas envoyer la liste des utilisateurs avec leur hachage de mot de passe. Il est donc préférable d'envoyer l'API ou les champs API sans hachage de mot de passe. Comment peut-on faire ça ? Auparavant, nous avons vu que nous pouvons exclure certaines parties de notre API ou certains champs. Comment nous faisons cela après avoir appelé la méthode find, nous mettons Select, puis j'appuie sur Minus, puis avec moins, je peux spécifier quel champ il devrait être exclu. Par exemple, ici dans ce cas, je dirai hachage de mot de passe. Et puis quand j'appelle l'API, je verrai que j'ai des champs sans hachage de mot de passe. Faisons cela aussi pour l'utilisateur unique. Je vais mettre ici sélectionner, ou nous pouvons copier ceci directement. Il fonctionne également avec find par ID, comme avec find et width, find par ID. Sauvez-le. Essayez-le. Et obtenons, par exemple, cet utilisateur avec cet ID que j'ai posté ici. Et nous voyons que nous avons eu cet utilisateur sans hachage de mot de passe. Nous pouvons également, lors de l'obtention de la liste des utilisateurs, par exemple, dans le panneau d'administration de mon application, je veux juste afficher le nom de l'utilisateur et par exemple, numéro de
téléphone et l'e-mail. Donc, dans ce cas, vous pouvez créer une API qui n'a que ces champs. Donc, vous pouvez sélectionner pas avec moins, mais vous pouvez dire nom, téléphone, e-mail. Donc, vous n'obtiendrez que ces champs avec cette requête de cette API. Alors, allons les chercher. Nous avons le nom, l'e-mail et le téléphone seulement. Ceci est très utile lorsque vous voulez, par exemple, lorsque vous avez une liste de becs et ensuite cette grande liste, vous voulez la réduire. Donc, vous voulez seulement sélectionner un champ spécifique que vous voulez utiliser dans le front end. Remettons-le au hachage du mot de passe. Donc, je veux seulement exclure le hachage de mot de passe et obtenir la liste des utilisateurs avec tous leurs détails.
37. Connecter une API REST et créer un jeton: Dans cette conférence, nous allons voir comment l'utilisateur peut se connecter et utiliser les API. Donc, il est nécessaire d'avoir son e-mail ou ID et mot de passe, puis de les envoyer d'une manière ou d'une autre avec API au serveur d'authentification. Et le serveur d'authentification répondra avec GW t, qui est JSON Web Token, et dire que l'utilisateur est authentifié et est capable d'utiliser les API qui sont sécurisées. Commençons à faire la première partie. Nous devons donc créer une demande de poste où personne peut envoyer son nom d'utilisateur et mot de passe au serveur. Donc, nous allons d'abord créer une demande de publication dans notre API utilisateurs. Donc, je dirai point de routeur post, et puis le chemin sera la connexion. Et puis nous allons enregistrer une méthode asynchrone, la requête et la réponse. Et nous aurons le rappel ici. Faisons la connexion par email. Donc, nous nous attendrons dans leur réponse par l'e-mail et mot de passe. Donc, d'abord, nous devons savoir si cet utilisateur existe. J' ai vraiment un utilisateur avec cet e-mail. Donc, d'abord, je vais créer constante, donner à l'utilisateur. Et cet utilisateur aura une méthode de poids, exactement comment nous l'avons fait avant l'utilisateur et en trouver un. Je veux trouver l'utilisateur par e-mail. Donc, je vais dire ici, trouver un, et puis ce sera objet. Je peux attribuer quel champ je veux rechercher l'utilisateur. Par exemple, je souhaite effectuer une recherche par e-mail. Donc ici, je vais dire e-mail. Et l'e-mail proviendra de l'email de point de corps de la requête. Donc ici, j'ai déjà l'utilisateur, qui sont envoyés à regarder par l'e-mail. Donc, si je reçois un utilisateur ou si je n'obtiens pas d'utilisateur, j'enverrai une erreur. Donc, nous allons faire ce retour l'utilisateur ou de l'état du point de réponse pour la fin de 100 points. Et puis nous dirons que l'utilisateur n'a pas trouvé. Sinon, j'enverrai la réponse que l'utilisateur est trouvé. Et il sera dans l'objet de sable comme utilisateur. Essayons cela pour être sûrs que cela fonctionne. Donc ici, j'ai besoin d'une demande de poste, je supprime cela, et ici nous aurons un login. Et on n'a pas besoin de tout ça. Nous avons juste besoin de l'e-mail, comme nous l'avons dit, et le mot de passe de l'utilisateur. Donc ici, j'aurai un mot de passe. Par exemple, disons 1, 2, 3, 4, envoyez-le. Et puis nous obtiendrons cet utilisateur vraiment exister avec cet e-mail. Faisons erreur dans l'e-mail. Vous en faites deux, par exemple, je vais obtenir l'utilisateur introuvable. Nous sommes donc sur la bonne voie maintenant. Nous avons donc trouvé l'utilisateur que nous voulons nous connecter. Pour se connecter à un utilisateur, nous devons comparer le mot de passe qu'il a entré et avec le mot de passe qui existe déjà dans la base de données. Mais nous avons déjà un mot de passe haché. Donc, nous devons en quelque sorte malheureux ou décoder ce mot de passe, puis le comparer avec le mot de passe que vous avez envoyé par l'utilisateur. Et puis je dis, d'accord, vous avez raison, vous êtes authentifié. Donc, après avoir été sûr d'avoir un utilisateur dans ma base de données avec cet e-mail, je veux vérifier que s'il y a un utilisateur que nous avons avant et déchiffrer Avec compare sing, je ne peux pas comparer deux mots de passe avec le hachage. Donc, je vais dire que le mot de passe de point de corps de point de requête, qui est envoyé par l'utilisateur, puis le comparer avec le hachage de mot de passe de point utilisateur, comme l'utilisateur, que j'ai trouvé avec son hachage de mot de passe. Donc, si ce succès de compression, je dirai, par exemple, envoyé au backend ou à l'extrémité frontale. Nous dirons, par exemple, état du point de
réponse, par exemple, à un utilisateur d'envoi de 100 points. Sinon. Nous supprimons cette partie. Et nous disons, par exemple, avec 400 et dire mot de passe est faux. Essayons ça. Et ici, par exemple, j'ai ce mot de passe, nom d'utilisateur. Je dirais que le mot de passe est faux, mais rappelez-vous que nous avons le mot de passe de cette façon de un à six et l'utilisateur a été authentifié. Donc, quand le mot de passe est faux, nous obtenons mot de passe est faux. Alors maintenant, nous en venons à la partie importante. Donc, nous avons vu avant que le serveur répondra avec le jeton web JSON. Donc, d'où je vais obtenir le jeton web JSON dans le back-end. Dans Node.JS, il existe une bibliothèque appelée JSON Web Token. Nous devons donc installer cette bibliothèque. Donc, je vais à l'autre fenêtre que j'avais quatre pour l'installation, je dirais npm I. Et puis JSON Web Token. L' installation de cette bibliothèque me donnera la possibilité d'utiliser des jetons Web JSON. Donc, nous allons l'avoir dans nos constantes ou importations, nous pouvons dire, d'accord, université AVT nécessite un jeton web JSON. Donc, je peux utiliser cette variable maintenant ou constante pour générer le jeton Web JSON. Comment faire ça ? Donc, quand l'utilisateur est authentifié et tout va bien. Donc, je vais dire const jeton. Et puis j'utiliserais cette bibliothèque JSON Web Token, ce signe il y a une méthode là. Et cette méthode acceptant l'objet, l'objet avec une charge utile et un secret, qui est une clé secrète ou privée. On parlera du secret. Donc ce JVP, ces signes comme nous l'avons vu avant, il demande un objet. Et cet objet aura, par
exemple, vous ne pouvez rien passer. Je peux dire, par exemple, l'ID utilisateur. Et l'ID utilisateur aura, par exemple, l'ID point utilisateur, l'utilisateur que j'ai obtenu ici, et avec son ID. Donc ici, vous pouvez passer les données que vous voulez avec le jeton. Nous verrons comment résoudre le jeton à l'avant. Et aussi comment nous pouvons comparer le jeton dans l'API d'authentification. Et ici, dans le second paramètre, nous devons passer un secret. Secret est quelque chose comme, par exemple, un mot de passe qui est utilisé pour créer vos jetons. Donc, il peut être n'importe quelle chaîne. Par exemple, je dirai, par exemple, la cigarette. Et après cela, il y a des options. Et dans ces options, nous pouvons ajouter quelques options au jeton,
comme la date d'expiration, que nous verrons plus tard. Et dans leur demande d'envoi de succès, nous enverrons l'utilisateur avec son jeton. Donc, je dirai envoyer l'utilisateur et l'utilisateur, par exemple, e-mail qui n'envoie que l'e-mail et le jeton. Ainsi, l'utilisateur obtiendra le jeton dans le front end et pourra l'utiliser pour accéder à l'API. Essayons ça. Alors je vais voir Facteur. Je vais utiliser la connexion. Encore une fois, nous avons un mot de passe incorrect. Mettons le bon mot de passe. Et puis j'ai reçu l'e-mail et un jeton. Donc ce jeton est créé par le secret que nous avons ici. Pour que tu puisses faire ce que tu veux. Et ce secret, personne ne le sait. Donc, il ne peut personne créer un jeton comme avec les mêmes jetons qui sont utilisés dans votre boutique en ligne. Donc, dans ce cas, aucun utilisateur n'envoie avec l'API, par exemple, n'importe quel jeton, et alors il aura la réponse, bonne réponse car il n'a pas le Secret. Nous verrons comment résoudre le jeton avec le secret que nous avons créé afin que l'utilisateur puisse obtenir la bonne réponse. Donc, si vous vous souvenez, nous avons ici les variables d'environnement. Donc ici, nous pouvons mettre notre secret. Par exemple, je peux dire ici secret. Mon chien est gentil. Alors je dis ici secret. Et nous l'utiliserons ici. Nous dirons constante. Et puis disons que le secret est des variables d'environnement de point de processus, point secret, que j'ai créé ici. Donc passons ce secret au lieu de la chaîne codée en dur. Revenons à nouveau pour être sûr que tout fonctionne bien. Donc on a un nouveau doc. Donc, parfois, vous voyez que lorsque vous êtes verrouillé sur un site Web le lendemain, vous êtes
automatiquement déconnecté. Cela se produit parce que ce jeton a expiré. Donc, le serveur a un certain délai d'expiration. Donc, lorsque vous essayez d'utiliser ce jeton, encore une fois, le serveur vous répondra, désolé, ce jeton est expiré. Comment définir l'heure d'expiration ? Le troisième paramètre de ce sinusoïde, il a des options. Et ces options peuvent être l'une d'entre elles. Par exemple, expirer dans, expirer dans, vous pouvez spécifier un jour, une semaine, un mois. Je veux un jour. Je dis un d. Si je veux une semaine, je dis 1 w. Donc normalement, regardons, par exemple, pour notre boutique en ligne, nous avons le jeton pour une journée. Quand je reviendrai après un jour pour utiliser une API et que je charge le jeton expiré, alors le serveur dira, désolé, vous ne pouvez pas utiliser cette API car elle a expiré. Sauvegardons ça. Et nous verrons dans la prochaine conférence comment protéger nos API. Donc, leur utilisateur ne peut pas utiliser d'IPI seulement s'il a un jeton.
38. Protéger l'API et l'authentification Middleware JWT: Nous avons vu avant comment l'utilisateur a maintenant le jeton. Maintenant, il peut l'utiliser pour accéder aux données ou à nos API, mais comment nous pouvons protéger notre serveur. Donc, personne ne peut utiliser l'API sans jeton. Comme nous l'avons vu auparavant dans notre app.js, nous avions un middleware. Et le middleware vérifie tout, va au serveur avant qu'il ne soit exécuté. Donc ici, dans ce point, je veux vérifier si l'utilisateur est authentifié ou non. La séquence. Pour ce faire, normalement, je crée dans mon, par
exemple, je veux créer un dossier d'aide. Et dans le dossier des aides, je vais créer un nouveau fichier, l'
appeler par exemple, GBT dot js. Et il y a et il y a une bibliothèque appelée Express JWT, qui est normalement utilisée pour sécuriser les API dans notre serveur. Alors installons cette bibliothèque, MPM express JWT. Et demandons-le. Donc, je vais dire constante JWT express. Et puis il faudra JWT express. Et la fonction de protection sera la suivante. Donc, je vais créer une fonction, l'
appeler Authentification ou notre JWT. Et cette méthode retournera DWT exprimé en tant que fonction. Et cette fonction, il a des options. On a déjà parlé du secret. Le secret est basé sur une chaîne où nous pouvons créer notre jeton. Donc, quand quelqu'un passe un jeton à notre, par
exemple, backend, nous devons le comparer avec la cigarette. Donc, si le jeton est généré sur la base de ce secret, alors il aura accès à l'API. Mais quand son jeton basé sur un secret différent, alors l'API ne fonctionnera pas. Et comme vous vous en souvenez, nous avons importé ce secret ou l'avons mis dans les variables d'environnement. Donc ici, je vais dire const secret à nouveau et ensuite traiter le point secret de l'environnement. Une autre option que nous devons passer est que l'algorithme génère ce jeton. Si nous allons sur le site de JWT io, nous verrons que le jeton peut être généré sur la base de nombreux algorithmes. Voici les plus utilisés. Pour l'exemple, j'utilise HS 256, qui utilise également la bibliothèque JSON Web Token. Donc, nous pouvons avoir, par exemple, les algorithmes est tableau HS 256. Maintenant, nous avons exploré cette méthode avec le module, donc nous disons que les exportations de points de module sont notre JWT. Donc, de cette façon, nous serons en mesure de l'utiliser dans notre app.js. Donc ici, je vais dire, ne pas utiliser notre JWT
provenant de constante de DWT, ce qui est nécessaire. Les aides JWT. Donc, le middleware est utilisé maintenant. Maintenant, notre serveur est sécurisé sur la base du jeton. Donc, toute demande que nous viendrons, on nous demandera l'authentification JWT. Et puis nous allons ici ou exprimons JWT où il s'est tourné pour nous. S' il est possible que l'utilisateur puisse utiliser cette API ou non en fonction de son jeton. Alors vérifions maintenant si notre API est protégée ou non. Donc, je vais demander un get de la liste des produits. Je vais ici, j'envoie cette demande et puis je vois cette erreur non autorisée. Donc aucun jeton d'autorisation n'a été trouvé. Express JWT a retourné pour moi cette erreur. J' ai donc besoin d'une manière ou d'une autre de gérer cette erreur et envoyé à l'utilisateur qui avait besoin de données. Mais d'abord, comment nous pouvons ajouter un jeton à la demande. Normalement, l'ajout d'un jeton avec une demande vient avec l'autorisation dans Postman. Et aussi à l'avant, vous devez utiliser, par exemple, un jeton de porteur. Et le jeton au porteur. Nous devrons passer le jeton que vous avez obtenu après la connexion avec l'utilisateur. Il existe différents types d'authentification que nous utiliserons ici, le plus grand. Donc, avant que nous avions aussi ici le jeton après que nous nous sommes enfermés avec un utilisateur Thomas. Et ici, nous allons passer ce jeton. Donc, l'autorisation ici à venir pour cette API chargée avec ce jeton. Donc, après avoir envoyé la demande, je vais y obtenir des données i. Si je supprime ce jeton, je ne le ferai pas. Je n'ai aucune autorisation en face et nous verrons comment charger le jeton sur la requête dans les en-têtes. Donc maintenant, nous sommes sûrs que notre jeton fonctionne. Alors faisons un changement ici. Faire une erreur. Nous verrons que sur erreur autorisée, jeton non valide. Donc, nous avons différentes erreurs ici. Nous devons donc gérer cette erreur d'une manière ou d'une autre. Nous verrons cela dans la prochaine conférence.
39. Traitement des erreurs d'authentification: Nous avons vu précédemment que nous avons eu quelques erreurs dans notre API. Nous devons donc gérer ces erreurs pour être affichées manière plus belle pour l'utilisateur ou le front end. erreur de gestion dans RGS peut être fait simplement de cette manière. Nous allons au middleware et nous disons AP US. Et nous créons une fonction qui contiendrait une erreur comme une réponse de requête de rappel. Et ensuite, dans ce cas, cette méthode sera exécutée chaque fois qu'il y a une erreur dans notre API. Donc, ici, vous pouvez vérifier s'il y a une erreur. Ensuite, vous pouvez monter, par exemple, response.status. Comme par exemple, disons 500 et le JSON. Et dans ce JSON USA par exemple, un message et ce message disant erreur dans le serveur. Ainsi, toute erreur peut se produire dans le backend sera appelée avec ce message. Essayons cela avec l'erreur que nous avons eue avec l'autorisation. Donc, je vais faire une erreur ici dans ce jeton. Donc, nous verrons ici que nous avons eu une erreur dans le serveur parce que nous avons un problème dans le jeton, mais nous ne savons pas quelle est l'erreur exactement. Nous pouvons donc classer ces erreurs en fonction du type. Parce que si nous
imprimons cette erreur en quelque sorte, disons au lieu du message, le sprint, cette erreur, une erreur ici et puis essayer, nous verrons que l'erreur a un nom. Basé sur le nom. Peut-être que je peux classer les erreurs ou nous pouvons les garder comme ça. C' est à vous de décider, mais nous pouvons le rendre plus beau de la façon actuelle. Mais d'abord, pour avoir un app.js propre, Déplaçons cette méthode à nos aides. Donc, créons un fichier ici, appelons-le gestionnaire d'erreur à JS. Et nous créons une fonction, appelons-le gestionnaire d'erreur. Et il aura les mêmes paramètres, erreur, requête, réponse, et suivant. Et puis nous pourrons gérer ce que nous avons ici. Donc on peut prendre ça si on le colle ici. Et de cette façon, nous pouvons garder J aussi propre que possible. Donc, ici, nous devons dire gestionnaire d'erreurs. Et le gestionnaire d'erreurs est constant. Erreur et apprentissage est requis auprès des assistants et du gestionnaire d'erreurs. Donc, en fonction du type ou du nom de l'erreur, nous pouvons classer nos erreurs. Par exemple, disons si le nom du point d'erreur, nous avons vu précédemment que nous avons un nom, une erreur autorisée. Donc, je vais retourner ici l'état 401, et l'erreur sera comme un message. Nous pouvons dire que le message est, par
exemple, l'utilisateur ne l'est pas. Comme nous le verrons également à l'avenir, nous aurons le type des erreurs qui est appelé erreur de validation. Nous verrons cela plus tard lorsque nous allons télécharger des photos. Ou nous disons que le nom du point d'erreur sera, par
exemple, une erreur de validation. Ensuite, la réponse sera la même que celle-ci. Mais par exemple, soyons assez. Maintenant, avec l'erreur seulement, nous allons changer ce message lorsque nous allons faire le téléchargement des images et des fichiers. Et pour les erreurs générales, il est préférable de gérer cela aussi. Donc, nous avons ici retourné l'état du point de réponse. Et quand il y a quelque chose de général, on peut dire que c'est une erreur de serveur, donc c'est 500. Et puis dans le JSON, j'envoie le message comme erreur. Ou vous pouvez envoyer l'erreur directement sans message. Ici, nous reviendrons et reviendrons ici aussi. Nous avons donc maintenant un gestionnaire d'erreurs pour notre autorisation et validation. Donc maintenant dans le front end, quand je fais une synchronisation non autorisée. Donc, quand je demande une API sans jeton, alors j'obtiens cette erreur. Et si je le fais, Par exemple, Je télécharge un PDF et je ne suis pas autorisé à télécharger un PDF sur notre Thurber, donc je vais obtenir l'erreur de validation. Et aussi s'il n'y a pas d'erreur classée ici, alors nous obtiendrons l'erreur en général comme un message dans le JSON. C' est agréable d'avoir des commentaires toujours dans le code. Ainsi, vous pouvez lire quelques commentaires pour expliquer quel type d'erreur est ceci.
40. Exclusion des routes de l'API REST: Bienvenue de retour. Maintenant, nous avons une API totalement sécurisée, donc personne ne peut l'utiliser sans authentification. Donc, dans ce cas, l'utilisateur, quand il voulait regarder dedans, il doit être autorisé. Ce n'est donc pas logique pour nous. Ainsi, l'utilisateur peut être en mesure d'utiliser un login pour obtenir un jeton. Donc, dans ce cas, nous devons exclure d'une manière ou d'une autre cette API d'être authentifiée. Donc ici, dans Express JWT, je ne peux pas dire à moins que. Et à moins que j'aie un objet où je peux localiser empathie est l'ensemble des API que je veux exclure. Par exemple, excluons la connexion. Fais ça. J' ai besoin de spécifier toutes les API que je veux qu'elles soient exclues. Donc, je peux dire ici, slash api, v1 slash utilisateurs et connexion. Donc je veux que celui-ci soit exécuté. Essayons que maintenant c'est Facteur. Et nous ne sommes toujours pas autorisés. C' est parce que j'ai besoin d'ajouter une autre barre oblique ici. Alors on va à nouveau chez Facteur. Nous essayons et nous avons à nouveau le jeton. Donc vous devez faire attention à avoir la barre oblique ici. Nous pouvons donc également ajouter le registre. J' ai déjà ajouté que c'est juste l'API, qui est exactement comme le post. Donc, ici, dans les utilisateurs, j'ai le registre de poste, qui est exactement le même que post. Ainsi, l'utilisateur peut également enregistrer un compte dans la boutique en ligne. Et ici est utilisé pour l'administrateur qui veulent supprimer ou ajouter des utilisateurs. Et les produits ? Produits Aussi, j'ai besoin d'une manière ou d'une autre pour obtenir le produit gratuitement sans authentification. Donc, je n'ai pas besoin que l'utilisateur soit authentifié pour obtenir le produit, car je ne veux pas que les gens se connectent. Ensuite, ils pourront voir ma boutique en ligne. J' ai besoin d'eux pour obtenir la liste des produits sans aucune authentification. Alors, comment nous pouvons faire cela, nous devons spécifier la méthode, la méthode HTTP. Donc, je peux dire imprimez-moi seulement que les requêtes GET, mais n'autorisez pas la publication. Sinon, les gens pourront poster des produits sur ma boutique en ligne. Donc, pour ce faire, cette méthode de chemin acceptant Un objet et cet objet a un premier champ en tant qu'URL. Et le deuxième champ est les méthodes. Et URL, je peux spécifier l'URL telle que nous l'avons ici. Mais au lieu de cela, j'utiliserai des produits. Et les méthodes seront obtenir, par
exemple, et les options. Et ce sera un tableau. Donc, nous voyons ici nous avons spécifié l'URL de l'API, puis nous spécifions les méthodes. Essayons ça. Je vais aller ici pour obtenir la liste des produits. Sans authentification. Ça fonctionne parfaitement. Et quand je supprimerai cela, ça ne marchera pas. Il est donc préférable de l'avoir comme ceci afin que l'utilisateur puisse obtenir la liste des produits dans le front end. J' ai refactorisé ici le code, donc il semble plus beau. Donc, ici, nous avons la variable API, qui est que nous l'obtenons à partir de la variable d'environnement. Et ici, j'utilise des ticks pour injecter la variable à l'intérieur de la force. Mais maintenant, nous avons un problème. Tu te souviens ? Nous avions auparavant dans les API pour les produits, nous avons créé des méthodes comme par exemple, obtenir en vedette et obtenir en vedette. Nous devions également être publics parce que je veux montrer le produit de fonctionnalités dans mon frontal sans authentification de l'utilisateur. Donc ici, si je veux l'essayer, je vais à Postman posté ici et je dis trois produits en vedette. Je ne serai pas autorisé. Dans ce cas, nous devons également spécifier cette URL ici. Mais alors nous aurons une très longue liste d'API, surtout au moment où nous avons une très grande boutique en ligne. Parce que nous avons besoin de beaucoup d'API. Non seulement dire, par exemple, me
donner le produit de fonctionnalité ou me donner le nombre de produits. Donc, la bonne chose ici que je peux utiliser une chaîne STD comme ça, je peux utiliser des expressions régulières. Les expressions régulières me donnent la possibilité de tout
spécifier après les produits, par exemple. Donc ici avec cette chaîne, je peux être capable d'utiliser celle-ci. Donc parce que nous avons ici, j'ai cette étoile. Donc n'importe quoi après que les produits fonctionnent. Donc maintenant, après avoir construit mes rejets, donc ici je dis barre oblique API, produits slash v1. Voici une barre oblique d'échappement. Il ne va donc pas entrer en conflit avec la barre oblique que nous devons définir. Ce sujet concerne les expressions régulières. Vous devez donc en savoir plus sur ces expressions régulières. J' utilise toujours le testeur rejette, qui est toujours situé en ligne. C' est un beau site appelé regex 101. Et ici, vous pouvez tester vos expressions régulières. Donc ici, je vais prendre celui-ci et l'essayer sur ce site. Donc, je dis ici, quelque chose comme ça sera autorisé, Mais si j'ai fait une erreur ici, alors il ne sera pas autorisé. Donc c'est exactement cette formule. Donc, ici, il est préférable d'utiliser toujours des expressions
régulières pour spécifier plus d'API et avoir moins de code. Essayons maintenant. Et nous avons nos produits en vedette. Faisons aussi la même chose, quatre catégories. Donc, nous avons ici 1 et catégories. Pour qu'on puisse les avoir. Et par exemple, nous ne pouvons pas les manger ou les poster. Donc, à l'avenir, lorsque j'ajouterai plus d'API, nous devons ajouter quelques exclusions ici, toujours dans ce tableau de chemins.
41. Ajouter plus d'informations d'utilisateur secrètes à Token: Nous avons vu avant quand nous avions une connexion que nous ne pouvons pas spécifier certaines données à l'intérieur de cette réponse ou à l'intérieur du jeton. Dans ce cas, je peux également passer quelques données secrètes, que je veux être vient seulement avec le jeton. Donc, si l'utilisateur n'a pas cette information dans le jeton, je ne lui permettrai pas de faire quelque chose. L' une des informations secrètes que je peux transmettre ici est l'administrateur. Ainsi est admin, je peux dire que cet utilisateur est administrateur sur la boutique en ligne ou non. Donc, dans ce cas, je peux lui permettre de regarder dans le panneau d'administration de la boutique en ligne ou non. Donc, l'utilisateur normal ne peut pas se connecter, mais l'administrateur, qui a admin, vrai, il a continué à chercher. Et bien sûr, dans ce cas, il est préférable de séparer les tables. Je peux donc avoir des utilisateurs et des clients, par
exemple, ou des utilisateurs et des administrateurs. Donc, cela nous verrons dans la prochaine conférence plus en détail. Maintenant, nous avons l'utilisateur et puis je vais vérifier l'utilisateur est admin. Donc, dans ce champ, dans ce jeton, je peux envoyer l'utilisateur s'il est administrateur ou non. Peut-être que vous me direz pourquoi vous ne pouvez pas faire cela dans le front end, comme vérifier si l'utilisateur est administrateur ou non. Dans ce cas, l'utilisateur sera en mesure, par exemple, un hacker qui a de l'expérience dans la programmation, il sera en mesure de l'avant de se connecter au panneau d'administration. Même il n'a pas cette capacité. Il peut juste créer une fausse donnée qu'il est administrateur. Et puis il peut mettre comme dans le JSON est admin est vrai. Et puis il pourra regarder dedans. Et ce cas, ce n'est pas bon dans notre boutique en ligne, donc il vaut mieux l'avoir sécurisé ici. Donc, si l'utilisateur n'a pas ce jeton, qui a est admin, alors il ne sera pas en mesure de regarder dans le panneau d'administration. Essayons ça et voyons notre jeton s'il est validé, je vais aller à Postman et appuyer sur Envoyer. C' est bien. Nous avons maintenant le jeton. Donc, nous vérifions ce jeton dans DWT dot io. Vas-y, essaye-le. Je dirai aussi cet admin et le délai d'expiration. Donc, dans ce cas, personne ne peut pas construire un jeton comme ça parce que non, il n'a pas le secret. Et si vous vous souvenez, toujours l'API vérifie ce jeton. Si elle a été construite avec cette cigarette, que nous avons spécifiée dans notre backend.
42. Utilisateurs et administrateurs: Comme nous l'avons vu précédemment, que nous avons exclu certaines requêtes API pour ne pas être authentifiées. Par exemple, ici les produits comme Git et les options ne doivent pas être authentifiés car ils seront sur le public. Ainsi, tout utilisateur public peut parcourir les produits dans mon e-shop. Ainsi, l'utilisateur de connexion qui s'est enfermé dans la boutique en ligne, il peut poster des produits ou mettre à jour des produits, des produits d'élite. Mais dans notre cas maintenant les utilisateurs, nos clients. Donc, si je suis client et que je me suis connecté au problème, alors dans ce cas, je serai en mesure de supprimer des produits. Et les premières secondes que je publie ce site web en ligne, il sera détruit. Si vous vous souvenez, nous avons créé dans le modèle un champ qui dit est admin. Donc, ici, nous spécifions l'utilisateur s'il est administrateur ou non. Dans notre e-Sharp, nous aurons également le panneau d'administration. Et ce panneau d'administration n'est pas autorisé pour les utilisateurs normaux à entrer uniquement les administrateurs. Donc, nous avons ici sur la table des utilisateurs, certains rôles d'utilisateur. Nous avons un client et nous avons admin, et ils sont tous les deux dans la table des utilisateurs. Vous avez ici la liberté de faire, par
exemple, des tables séparées dans ce cas. Mais ici, je voulais mentionner les rôles des utilisateurs. Ainsi, vous pouvez également les faire dans la même table mais avec des rôles différents. Il y a plusieurs façons de faire des rôles d'utilisateur dans Node.JS, mais je vais avec la façon la plus simple dont nous avons besoin pour notre e-shop. Si vous vous souvenez, une fois que l'utilisateur s'est connecté à l'application, il a reçu un jeton. Et ce jeton est surchargé avec l'ID utilisateur et est admin. Et ici, nous savons à l'intérieur du jeton si l'utilisateur est administrateur ou non. Et lorsque l'utilisateur envoie une requête, la bibliothèque JWT démonte ce jeton avec le code secret qui est fourni dans notre API ou dans notre serveur. Et il verra que s'il est vraiment généré à partir de ce serveur ou non. Ainsi, nous pouvons identifier l'utilisateur s'il a jeton de notre e-shop ou non. Jusqu' à maintenant, tout est bien. Supposons que j'ai un bon jeton. Et je veux aussi regarder dans mon travail d'administrateur. Laisser de cette façon, il nous gardera pas sûr parce que l'utilisateur, dans ce cas est en mesure de supprimer ou d'ajouter des produits. Donc, le JWT express a une excellente méthode qu'il examine, par
exemple, ou révoque le jeton dans certaines conditions spécifiques. Pour ce faire, il y a un champ est révoqué, et ceci est révoqué est une fonction. Donc, nous pouvons aussi, dans le rappel, nous pouvons spécifier si l'utilisateur est admin ou non. Donc, je crée ici, par exemple, une autre méthode est révoquée. Et cela est révoqué sera une fonction, fonction asynchrone. Et il aura une demande, une charge utile. Et Don. Quels sont ces paramètres ? La requête est quand je veux utiliser les paramètres de la requête ou le corps de la requête, je veux savoir quelque chose ce qui envoie l'utilisateur. La charge utile contient les données qui se trouvent à l'intérieur du jeton. Par exemple, je veux obtenir est admin à partir du jeton qui est signé à l'utilisateur. Et cet utilisateur me l'envoie avec les en-têtes de requête. Donc ici dans ce cas, je peux dire si ce n'est pas le point de charge utile est admin. Parce que maintenant j'ai accès à cela, est admin à la charge utile de ce jeton. Ensuite, je reviendrai que fait est nul et vrai. Donc, dans ce cas, nous disons que rejeter le jeton. Donc, si une API autorisée appelée et que notre utilisateur n'est pas admin, alors elle sera rejetée. Et sinon, s'il est administrateur, nous pouvons dire fait sans aucun paramètre. Comme nous l'avons déjà dit, nous n'avons que deux types d'utilisateurs dans notre numéro. Donc, nous avons admin et utilisateurs. Si vous avez plus de rôles, vous pouvez les entendre, les classer. Et ici, vous définissez ce qui est évoqué ou ce qui est autorisé. Essayons ça avec le facteur. Si vous vous souvenez, nous avons un utilisateur ici, Thomas Jackson, qu'il n'est pas administrateur de la boutique. Et ce sont ses données. Donc, nous voyons ici que l'administrateur est faux. Et quand j'ai essayé de poster un produit dans notre API et nouveau produit, je vais obtenir l'utilisateur n'est pas autorisé. Changeons le jeton pour être avec admin via. Eh bien, allons à la base de données manuellement et changez cet utilisateur pour être un administrateur. Donc, je vais dire ici admin à travers et puis je clique sur mise à jour. Si j'essaie maintenant d'utiliser envoyer, je vais également obtenir non autorisé. Pourquoi ? Parce que j'utilise le jeton qui est chargé avec est admin false. Nous devons donc regarder à nouveau pour obtenir un nouveau jeton. Donc, je vais à l'API de connexion, j'ai l'utilisateur et le mot de passe. J' envoie cette demande, j'ai un nouveau jeton. Et nous allons l'utiliser dans nos demandes de poste. Sur autorisation. Je joue, le remplacer ici et essayer à nouveau. Et il est posté avec succès le produit grâce à express JWT qu'il a cette méthode. Donc, il a été capable et nous a permis de faire, par
exemple, ce rôle d'utilisateur. Maintenant, notre application est entièrement sécurisée et personne ne peut l'
utiliser ou y accéder sans aucune autorisation ni aucun rôle d'administrateur.
43. Obtenir l'API REST de compte d'utilisateurs: Parfois, l'administrateur de l'atelier veut savoir combien d'utilisateurs ou de clients il a dans son atelier. Donc, dans ce cas, il a besoin d'une API pour obtenir le nombre d'utilisateurs. Nous l'avons déjà fait avec les produits. Nous avions une API, en particulier pour obtenir le nombre de produits que nous avons dans notre numéro. Nous allons donc le copier et aller à l'API de l'utilisateur. Après la connexion et l'enregistrement, nous pouvons l'utiliser ici. Et nous disons le même getCount, mais l'utilisateur. Et ici, nous disons le nombre d'utilisateurs. Si aucun compte d'utilisateur, retournez 500, puis votre retour pour moi compte d'utilisateur. Alors sauvegardons essayé à son Facteur. Nous allons par exemple, ici, je dis utilisateurs et obtenir compter. Essayez-le. Nous avons une erreur parce que je fais un post. On doit faire un GET. Nous essayons encore. Nous avons le nombre d'utilisateurs pour, nous avons vraiment quatre utilisateurs. Nous n'avons pas également fait de demande de suppression. Donc, nous allons aussi le copier à partir, par
exemple, des catégories ou des produits. On peut le faire d'ici et l'obtenir. Et puis nous mettons une demande de suppression et je remplace l'utilisateur, l'utilisateur. Et tout le reste est utilisateur. Donc, comme vous le voyez ici, c'est exactement la même façon que nous l'avons fait avec les produits. Nous le gardons, et maintenant nous en avons complètement fini avec les utilisateurs. Je suis si heureux que vous finissiez ce module et vous verrez le code où nous sommes arrivés dans le dossier ressources. Donc, vous pouvez le télécharger et ensuite essayer des choses, changer des choses, essayer par vous-même et essayer de comparer votre code avec le code que j'ai téléchargé.
44. Commandes: Bienvenue dans une nouvelle section. Dans cette section est entièrement liée aux commandes. Nous avons donc créé leurs produits et aussi les utilisateurs. Et maintenant, nous allons construire les ordres. Comme chaque e-shop, l'utilisateur va avoir une carte remplie et puis il va vérifier pour soumettre une commande. Cette commande viendra avec l'adresse de la personne et aussi les options d'expédition et comment il paiera cette commande. Et nous verrons aussi après que l'utilisateur se soit connecté, comment nous obtiendrions également les données de l'utilisateur et remplissons automatiquement les données de la commande. Donc, sans laisser l'utilisateur sentir à nouveau l'adresse de facturation. Nous allons donc laisser les données proviennent de l'information utilisateur que nous avons créée auparavant. Et aussi dans cette section, nous allons voir comment lier le produit à la commande. Nous verrons donc que la commande contient de nombreux produits. Donc, parfois, j'ajoute, par
exemple, un t-shirt et un pantalon. Nous allons donc voir comment lier la commande avec les produits. Et dans le back-end ou dans le back-office où l'administrateur peut se connecter et contrôler les commandes. Nous verrons comment nous serons en mesure de changer l'état de l'ordre. Donc, il sera de livré ou par exemple, expédié, ou même il est en attente ou annulé. Donc ici tout sera lié totalement au backend. Nous ne travaillerons pas sur le front. Donc, nous allons travailler avec Facteur. L' étudiant peut comprendre comment ce backend fonctionne isolé de l'extrémité frontale. J' espère que vous apprécierez cette section. Cette section, comme je vous l'ai dit, ne reprend pas les sections précédentes. Il n'y a pas de nouvelles choses. Comment nous allons lier les produits comme tableau d'articles de commande et aussi le lier à la commande est prêt. Et commençons.
45. Commandes et articles de commande Modèle et schéma: Bienvenue de retour. Maintenant, nous allons implémenter le schéma de commande et le schéma d'éléments de commande. Auparavant, nous avons mis en place la base de données ou nous avons planifié la base de données en fonction de ce dont nous avons besoin pour l'e-shop. Comme vous le voyez à droite de l'écran, nous avons déjà la table des commandes et des articles de commande. Comme dans la base de données relationnelle, nous voyons la connexion entre la commande et les éléments de commande. Commençons d'abord par les commandes, comme nous l'avons vu auparavant, avec les produits et la relation avec les catégories. Nous avions également implémenté que la catégorie a un type d'ID d'objet et la référence est à la table de catégorie. Donc, faisons la même chose entre la commande et l'article de commande. Donc je vais copier cette partie. Je vais passer à la commande et je vais mettre ici les articles de commande. Et ici, nous aurons l'ID de l'objet et la table de l'article de commande et nécessaire oui, à travers. Mais la différence ici que nous avons peut-être plusieurs articles de commande, pas seulement un. Donc, en Mongoose, nous pouvons implémenter cela en alignant cela à l'intérieur d'un tableau. Donc, dans ce cas, nous devons passer ou avoir le tableau
des éléments de commande des ID des éléments de commande qui existent dans la base de données. Donc, dans ce cas, nous devons créer une table d'articles de commande. Alors, avons un dossier ici. Appelez-le point de commande js. Et il aura le même schéma, Mongoose toutes ces informations. La chose ici, nous aurons l'article et voici les éléments que nous n'avons pas cela. Nous aurons la quantité, qui est le numéro de type. Et c'est nécessaire. Oui, c'est vrai. Et comme nous le voyons aussi que nous avons un produit. Nous devons donc lier cet article de commande au produit. Donc, je vais dire ici que j'aurai l'ID ou le type d'ID d'objet. types de schéma Mongoose que l'ID d'objet. Et c'est la référence de cet article de commande sera produit. Et nous allons exporter comme article de commande et l'avoir comme article de commande. Et ici, nous avons commandé un schéma d'article. Donc, notre article de commande est prêt, que nous avons importé ici. Et nous avons référencé avec l'ID d'objet dans la table des ordres. Donc la chose ici que nous avons beaucoup de relations. Donc, la commande est liée à tout autre article et l' article de
commande est lié ou se réfère au produit. Donc, dans ma demande, lorsque je demande une commande, je vais obtenir tous les autres articles, y compris leurs produits et remplir ces produits. Par exemple, j'ai besoin du nom et de la catégorie aussi. Ici, j'ai ajouté rapidement les autres champs dont nous avons besoin, l'adresse de livraison, 12 ,
ville, code postal, pays, état de
téléphone, que nous dirons qu'une valeur par défaut en ajoutant. Ainsi, lorsque la personne soumet une commande
, la valeur par défaut ou le premier état de la commande sera en attente. Et ici, nous avons aussi le prix total. Comment nous verrons que nous le calculerions en interne lorsque nous créons la commande. Et ici, une autre référence avec l'ID d'objet à la table utilisateur. Nous savons quel utilisateur ou son trouble et la date ordonnée ici, que l'utilisateur n'a pas à l'envoyer au back-end. Il sera automatiquement créé avec le point maintenant. Donc, il va créer l'heure où la demande de poste est envoyée. Et comme vous vous en souvenez avant, nous avions ici quelques identifiants virtuels. Donc, pour ne pas avoir cet ID de soulignement, nous pouvons aussi avoir un ID normal. Copions-le aussi et nous l'avons de la même manière. Donc ici, j'ai dit schéma de commande, créez pour moi un champ d'ID virtuel au lieu d'ID de soulignement. Maintenant, nous sommes prêts à travailler avec ces tables. Par exemple, ici, nous avons commande et commande article, sorte que la relation est obtenue entre ces deux tables. Et maintenant, nous sommes prêts à créer notre API avec des commandes.
46. Exemple de Refs: Ainsi, l'ordre est lié aux éléments de commande par tableau. Voyons donc et lisons l'exemple comment le frontal enverra ces données au back-end que j'ai créé ici et objet, par
exemple, comment l'utilisateur enverra les données au back-end. Donc, tout d'abord, imaginons que l'utilisateur a un panier et il a sélectionné deux produits, produit 1 et le produit 2. Et ils ont des identifiants différents. Donc, les articles de commande seront tableau de deux produits, et chaque produit aura une quantité. Donc, de cette façon, j'ai tableau d'article de commande ou leur article a une quantité et le produit. Et le reste sera le même. Sauf ici, nous verrons que l'utilisateur enverra le nom d'utilisateur, mais nous envoyons l'ID utilisateur créant la commande. La même chose ici. Nous n'avons pas envoyé le nom de leur produit, mais nous l'avons envoyé. Voici donc comment l'ID de produit est lié à l'article de commande et comment les articles de commande sont liés à la commande.
47. Nouvelle commande et créer des éléments sur l'affichage de votre nouvelle commande: Passer une commande dans notre base de données nécessite des données de l'utilisateur. Comme nous l'avons vu précédemment, nous avons ces données JSON où ils utilisent après avoir effectué la commande, il placera la commande dans notre base de données. Donc, ce que nous avons besoin d'abord pour créer une demande de poste dans l'API commandes, nous avons déjà une demande GET. Nous devons créer maintenant une demande de post pour ne pas répéter le même processus que nous l'avons fait auparavant. Copions la demande de poste la plus simple que nous avons créée dans les catégories. Et nous allons ici deux catégories, poster la demande et le copier, et le coller dans nos commandes. Donc, ce qui est exigé de
nous, nous avons besoin de créer un modèle d'ordre et les champs de l'ordre que
nous étions, nous avions avant et créé le schéma. Supposons donc le cas le plus simple car l'utilisateur enverra ces données. Donc, ici, nous obtenons les données. Je les colle rapidement pour ne pas répéter le même processus. Donc, nous avons de l'utilisateur les éléments de commande tous viennent avec le corps de la demande, qui est celui-ci ici. Donc, nous avons tous les autres éléments et toutes les données qui sont envoyés par l'utilisateur à partir du front end. Allons réparer ce truc ici. J' enseigne de cette façon comment l'appeler rapidement, donc nous n'avons pas à écrire à nouveau tout concernant la commande parce que, vous savez, nous avons toujours poster la demande, nous avons toujours supprimer la demande. Il est donc préférable de le copier à partir de la demande de base et de changer, par
exemple, les choses de nom à tenir sur notre nouvelle API. Donc, ici, nous avons commandé tout maintenant commande et renvoyé l'ordre créé. Mais si vous vous en souvenez, nous avons créé la table des articles de commande. Donc, l'utilisateur ne sait pas dans le front end que les éléments de commande qui sont stockés dans la base de données. Donc ici, vous allez simplement envoyer ces données. Il veut trois fois de ce produit et deux fois de ce produit. Mais pour récupérer ces données et les stocker pour l'administrateur, ce sera comme par exemple,
nous pouvons dire un obstacle, un petit obstacle pour les récupérer à nouveau à partir de la base de données. Mais nous allons résoudre cela avec Mongoose au cours de cette relation entre les articles de commande et de commande. Donc, lorsque l'utilisateur ou la demande de poste est envoyé ou créé, nous devons d'abord créer les éléments de commande dans leur base de données
, puis les joindre ou les lier à la demande de commande que nous avons ici. Et comme nous l'avons vu précédemment, que les éléments de commande, c'est tableau d'ID de la table d'élément de commande. Donc, dans ce cas, nous avons besoin d'un tableau d'ID, ID qui sont dans la base de données de ces articles de commande. Donc, d'abord, nous devons créer ces identifiants ou comment Mongoose les créera pour moi. Et puis je les stockerai avec la commande ou les relierai à cette commande. Donc ici, nous ne recevrons pas
directement de l'utilisateur l'article de commande qui contient le produit et la quantité sait, nous avons seulement besoin d'un tableau d'ID. Donc, nous pouvons dire des ID d'articles de commande. Et ces ID d'article de commande proviendront de nos articles de commande créés dans la base de données, ce que nous allons faire ici. Nous avons donc cette constante const ID d'article de commande, dont nous les obtiendrons après la création de l'élément de commande dans la base de données. Donc, nous avons besoin en quelque sorte deux premières boucles à l'intérieur des éléments de commande qui sont envoyés par l'utilisateur. Donc, je vais dire le corps de point de requête, points d'ordre à boucle toujours nous utilisons la carte parce que nous savons que l'utilisateur va envoyer tableau, tableau d'éléments de commande. Et ici, nous aurons ou leur article, un article de commande. Et puis à l'intérieur de cet article de commande, nous créons un nouvel article de commande, nouveau modèle d'article de commande. Modèle d'article donc commandé. Nous avons besoin de l'avoir à partir de nos modèles ou de leur article. C' est exactement comme si nous créons une nouvelle catégorie ou un nouveau produit, ou c'est comme une demande de publication. Donc, je dis ici, ou l'article, quels sont les champs de l'article de commande ? Nous avons une quantité et un produit. Alors je vais ici, je dis quantité. Donc, nous avons déjà un élément de commande de la liste des éléments de commande qu'ils utilisateurs. Et donc je dis ici, commander la quantité point d'article et aussi le produit, qui contiendra l'ID du produit. Donc, à partir de l'article de commande point produit, alors nous devons enregistrer cet article dans la base de données. Donc, je dis laisser ou le nouvel article de commande, la même variable que nous pouvons l'utiliser. Attendez un nouvel article de commande que nous avons créé précédemment ou le modèle, et pas sûr. Donc, ici, nous enregistrons l'élément de commande dans la base de données. Donc, quand nous bouclons dans les articles de commande, donc pour chaque article de commande, je l'enregistrerai dans la base de données. Mais je veux que cette carte rende pour moi seulement les identifiants. Donc ici, je dis ne retourne pas le nouvel article de commande, mais le nouvel ID point de l'article de commande. Donc, dans ce cas, nous obtiendrons seulement les ID dans un tableau. Nous avons donc créé les ID de commande et nous les attachons à la commande, et nous allons sauvegarder la commande. enregistrons pas maintenant dans la base de données, nous allons simplement envoyer l'ordre est créé ou le
modèle de commande au frontal à l'utilisateur après avoir posté la demande. Essayons ça avec Facteur. Je vais chez le facteur et je remplace cela par des commandes basées sur notre API, comment nous l'avons créée. Et puis je mettrai ici les données. Examinons d'abord le jeton d'authentification, puis le corps, ce que nous avons ce JSON par exemple, je reçois déjà ces ID de notre base de données. Donc, nous devons déjà avoir ces ID dans la base de données. Envoyez-nous la demande de poste. Nous voyons que nous avons eu une erreur. L' erreur vient, Voyons voir dans la console de notre serveur de test ou de notre serveur, nous verrons que nous avons ici un poids. C' est parce que nous avons ici un poids, mais cela nécessite une fonction asynchrone. Je veux dire ici. Donc, ici, nous avons un poids et cela nécessite une fonction asynchrone. Donc, dans ce cas, nous ne pouvons pas attendre à l'intérieur d'une fonction normale. Nous avons besoin de placer une fonction asynchrone fondamentalement est celui-ci. Donc, je dirais ici async et enregistrer et essayer à nouveau. Et nous verrons que la demande est créée ou que l'ordre est refroidi recréé, mais les éléments de commande sont vides. Effectuons le suivi de ces articles de commande pour voir pourquoi ils ne sont pas créés. Pour les suivre. Nous pouvons faire le journal de la console de l'ordre, des articles, des ID. Et voyons dans la console ce qu'il reviendra pour nous. Donc ici, j'ai sauvé. Et puis essayons à nouveau. Vérifions la console. Nous verrons que nous sommes revenus aux promesses. Donc, nous ne retournons pas réellement l'ID, nous retournons une promesse. Cela parce que nous avons ici la fonction asynchrone
et attendons, et nous revenons avec attente une promesse. Donc, d'une certaine manière, nous devons résoudre ces promesses. Parce que l'utilisateur envoie un tableau d'éléments de commande, pas seulement un. Nous devons donc combiner ces promesses ensemble. Donc, ici, nous avons un tableau de promesses pour les combiner, j'utilise le point de promesse tout. Donc ici, dans ce cas, j'aurai une promesse de retour ou une promesse, qui sera résolue après cela ici, avant de créer l'ordre. Alors essayons de consolider. Encore une fois. Nous voyons que nous avons eu une promesse, pas des promesses comme avant. Nous devons donc résoudre cette promesse. Comment nous pouvons le résoudre, nous pouvons créer une nouvelle constante. Appelez le numéro de commande est seulement ou des articles de commande. Les identifiants, par exemple, ont été résolus. Parce que c'est une promesse. Donc je peux dire ici, euh, attendez que ça soit résolu et imprimez-les pour moi. Ensuite, je remplace cet ID d'articles de commande par les ID d'articles de commande résolus. Essayons encore. C' est génial. On les a retrouvés. Et dans le journal de la console, nous avons les deux identifiants qui sont créés pour nos articles de commande. Vérifions cela dans la base de données. Après la connexion, je vois ici la table des éléments de commande est créée. Je n'ai pas créé qu'ils livre atlas est très intelligent. Donc, basé sur le modèle que j'ai créé dans ma base de données ou dans mon code, il crée la table pour moi. Donc ici, si je vais à commander des articles, je vais voir à commander des articles qui sont créés sur
la base du facteur et ils ont le même ID qui sont dans la base de données. Alors maintenant, nous sommes prêts à créer notre commande. Donc ici, nous n'avons rien, donc nous n'avons pas de table de commande. C' est parce que nous avons commenté cette sauvegarde. Donc, ici, après que la commande est créée ou enregistrée, alors je vais la renvoyer. Supprimons ce journal de console pour ne pas avoir notre journal plein de données inutiles. Alors, je vais maintenant voir le facteur. Passez une commande. Super. Nous avons maintenant créé une commande, et nous avons ici, le nouvel ID est créé de la commande. Donc, si je vais à nouveau à Atlas, je vais me rafraîchir. Et nous verrons que la table des commandes est créée automatiquement parce que nous avons le modèle de commande. Alors ce que j'ai demandé à Mongoose de créer pour moi ce modèle de commande, puis il a créé la table. Donc, ici, nous avons d'autres éléments, l'ID d'objet des nouveaux éléments de commande qui sont créés à nouveau ici. Donc, chaque fois que je passe la commande, je crée un nouvel article de commande. Dans la prochaine conférence, nous allons voir comment obtenir des articles de commande ou la commande elle-même de manière plus détaillée. Donc, nous n'obtiendrons pas seulement des ID, nous obtiendrons plus détaillés. Nous verrons l'article de la commande, ce qu'il contient, et aussi tout. Par exemple, quel utilisateur l'a créé, pas seulement les ID.
48. Obtenez les détails de l'commande et remplissez les produits dans les articles d'ordre et le: Ok, maintenant nous allons obtenir une liste de commandes car nous avons maintenant un ordre dans la base de données. Nous avons déjà créé une demande GET pour une liste de commandes. Essayons maintenant avec un Facteur. J' irai ici, créer la même chose que la demande de poste, mais ce sera un GET et l'autorisation parce que toujours quand je crée une nouvelle API, je dois l'avoir authentifiée. Ou nous excluons cette API de l'authentification comme nous l'avons vu précédemment. Donc maintenant, je vais utiliser ce jeton obtenir des souris de liste, nous avons une liste d'ordres. Donc, nous n'avons maintenant qu'un seul ordre dans la base de données. Et nous l'obtenons avec la requête GET car c'est un tableau. Remplissons l'utilisateur afin que nous puissions voir les détails de l'utilisateur à l'intérieur de cette requête. Parce que par exemple, je veux voir dans le panneau d'administration, dans le tableau des commandes, je veux voir les utilisateurs qui les ont commandés. Donc, nous allons dans le code et nous disons juste dot populate. Que remplir l'utilisateur. Sauvegardez. Essayez-le encore avec Postman. Nous obtenons maintenant le détail de l'utilisateur, tous ses détails. Mais pour moi en tant qu'utilisateur ou administrateur, je n'ai pas besoin de toutes les informations de l'utilisateur. Donc je veux juste, par exemple, son nom. Pour faire ça. Nous venons de mettre après la population de l'utilisateur, nous mettons les champs que nous voulons remplir. Donc tout ce que j'ai, par exemple, le nom et dans Postman, quand j'envoie cette demande, je reçois seulement le nom. Postons une autre commande avec des données différentes. Par exemple, je dirai ici au lieu de pays, République
tchèque, Je vais mettre USA. Donc ici, je vais y aller et dire, je n'utilise pas un numéro différent. Exemple : 1, 2, 3, 4, 5, 7. Donc ici, je vais poster une autre demande ou une autre commande. Donc, dans ce cas, je vais y entrer au moins deux ordres. Nous pouvons donc également trier les commandes par date. Donc parce que nous avons déjà ce champ de date commandé, donc nous avons la date ici par le point. Maintenant, nous pouvons aussi trier cela par date. Pour ce faire, c'est très simple. Je vais juste ici et après la population de l'utilisateur, je dis trier en fonction de la date de la colonne ordonnée. Donc, ici nous avons, vous vous souvenez d'une date ordonnée. Et sur la base de cette colonne, je veux trier ma sortie. Alors on y va, Facteur, essaie de récupérer la liste, et on voit qu'on les ordonne par date. Comme vous le voyez, la commande ici est de la plus ancienne à la plus récente. Donc, nous avons déjà celui-ci le 23 décembre à ce moment. Et nous avons maintenant celle-là. Ainsi, nous pouvons commander du plus récent au plus ancien. Et je pense que ce qui intéresse l'utilisateur de le faire. Nous alignons simplement cela dans un objet ,
puis disons que cet objet égal à moins un. Donc, quand je dis dans la méthode de tri, ce cas, alors cela signifie que les commander du plus récent au plus ancien. Donc, si je me rafraîchis et aller chez Facteur tout de suite, et nous verrons que nous avons le plus récent 1 d'abord, puis le plus ancien. Vous pouvez consulter la documentation de la méthode de tri. Il a beaucoup de fonctionnalités. Vous pouvez donc les utiliser pour trier vos sorties en fonction d'
un champ spécifique ou d'un ordre spécifique. Nous allons maintenant obtenir un détail de demande ou un détail de commande. Donc, la même chose est ici. Je poste ou je reçois cette demande collée ici. Et puis au lieu d'avoir le tri et la population, nous avons trouvé par ID. Et ici, nous spécifions l'ID. Et l'ID sera la requête point params. Parce que ses paramètres ont pris ID. Et nous avons été renommés ceci pour commander seulement au lieu de la liste ordonnée. Ici, nous avons l'ordre, l'ordre, l'ordre. Je vais maintenant à l'avant et je reçois, par
exemple, celui-ci. Après cela, j'ai mis cet ID de la commande et j'envoie cette demande. Et je n'obtiendrai que cet ordre avec la population de l'utilisateur. Nous en venons maintenant au point important. Nous avons ici, les articles de commande uniquement comme ID. Nous voulons voir les produits sont à l'intérieur de ces articles et la quantité qui, nettoyons un peu notre code. Donc nous avons ici peupler. Et nous aurons également enseigné peupler d'un autre domaine qui est des articles de commande. Nous essayons ça maintenant. Nous verrons que nous avons obtenu le produit et la quantité. Mais que faire si je veux aussi remplir ce produit
d'une manière que nous voyons le détail du produit à l'intérieur ou les articles. Donc, comme nous l'avons vu ici, l'utilisateur, nous avons tous ses détails. La différence ici que nous avons un tableau d'entre eux. Nous devons donc savoir comment remplir le produit à l'intérieur de ce tableau d'articles de commande. Pour ce faire, nous avons ici une façon différente de peupler. Donc, au lieu de faire cela, la méthode populate sera un objet qui acceptera un chemin. Et ici, je mets l'article de commande ou des articles de commande. Et à l'intérieur de cet objet, je dis aussi remplir pour moi le champ, qui est appelé produit. Donc, je vais le mettre ici et essayer à nouveau. Nous verrons comme une magie. Nous avons toutes les informations sur les articles de commande. Et dans notre base de données, l'ordre ressemble à ceci. Donc, si nous
actualisons, nous avons notre commande uniquement avec des ID et les articles de commande ne sont que des ID. Donc, de cette façon, nous gardons une petite taille les documents de la base de données, et nous faisons les relations en utilisant la flexibilité Mongoose. Si nous voyons aussi ici que le produit a la catégorie et la catégorie est également id. Si je veux remplir aussi la catégorie, nous ne pouvons pas le faire. Pas de problème. Nous pouvons dire aussi que c'est peuplé. C' est un chemin qui est appelé produit et ensuite remplir la catégorie qui se trouve à l'intérieur de ce produit. Donc, si nous allons à nouveau, envoyer cette demande, nous verrons la catégorie est également remplie pour toute la commande. Donc, pour le rendre plus propre, nous ne pouvons pas avoir ici ce chemin, donc nous pouvons comprendre comment il a été construit. Donc ici, j'ai dit ici, celui-là. Maintenant, j'ai le code propre. Donc, c'est la façon de faire la population de la relation entre les tables dans la base de données. Nous voyons dans le futur. Maintenant, comment nous supprimons ces commandes et comment nous mettons à jour l'état de cet ordre, qui sera dans la prochaine conférence.
49. Mise à jour de l'API REST: Après avoir fait la demande GET et poster la demande de commande, Faisons la demande de mise à jour que les exigences de mon problème vers le haut. L' administrateur du A-Sharp veut seulement modifier le statut de la commande. Ainsi, lorsque certains clients passent une commande à l'e-shop, le propriétaire de la boutique veut traiter cette plus ancienne. Ainsi, de cette façon, la commande sera transférée de la flexion, puis à traitée, puis par exemple, à déplacer puis à l'état livré. Nous avons donc juste besoin de mettre à jour l'état de la commande. Nous avons vu précédemment comment nous mettons à jour, par
exemple, le produit. Nous mettions à jour tous les champs de sorte que l'utilisateur ou le frontal doit m'envoyer à nouveau tous les champs. Mais ici, dans les ordres, nous avons juste besoin de mettre à jour un champ, qui est le statut, qui est celui-ci. Pour ce faire, faisons-le aussi vite. Nous copions l'une des demandes, par
exemple, à partir de catégories. On a celui-là. Nous le copions dans les ordres. Cette pièce d'identité extérieure. On a besoin de la carte d'identité. Et puis je dirai ici que j'ai l'ordre. Ici. Je demande le modèle de commande. Et ici, nous ne passons rien, seulement le statut. Ainsi, le statut viendra de l'exigence ou de la requête point body, point status. De cette façon, s'il n'y a pas de commande affectée avec cet ID, alors j'envoie une erreur. Sinon, je renvoie la commande mise à jour. Bien sûr, vous pouvez ajouter tous les champs que vous souhaitez mettre à jour. Mais les exigences pour cette e-boutique, je n'ai besoin que de mettre à jour le statut. Sauvegardons ça et essayons ça avec le facteur. Donc, nous avons déjà cette commande, Nous allons mettre à jour. Donc, j'aurai une ligne et le type de cela ou est JSON. Donc ici, je vais dire que le statut sera, par exemple, expédié. Donc j'ai mis ici expédié. Et nous devons également changer cette demande pour mettre. Et nous l'envoyons. Et nous avons eu le même ordre qu'un quart de travail. Alors revenons à l'ordre. On a une arrivée ici, vérifie-le. Nous voyons déjà le détail de la commande et nous avons le statut de la commande sera expédiée. La suppression de la commande sera la même. Copions aussi l'ordre Supprimer de la catégorie. Et ici, nous allons ajouter l'ordre, trouver par ID, et puis il retournera pour moi commande. S' il y en a ou là, alors retournez le vrai succès. Sinon envoyer une erreur ou pas trouvé notre erreur dans le serveur. Alors essayons ça avec Postman aussi. Je vais changer cela de get à delete. Nous avons supprimé et nous obtenons le succès. Cette catégorie est supprimée. Nous devons réparer ça parce que ce n'est pas une catégorie. Nous devons le faire comme ordre. Et ici aussi commander. Donc maintenant, si je veux obtenir une liste des commandes, encore une fois, nous n'aurons qu'un seul ordre, qui est celui qui a appelé USA. Et nous n'en avions qu'un. Peut-être que quelqu'un va demander Qu'en est-il des articles de commande ? Sont-ils supprimés ou non. Vérifions cela dans la base de données. Dans notre base de données, nous avions des articles de commande et nous devrions avoir deux commandes seulement pour commander des articles, mais nous voyons que les articles de commande sont toujours là. Donc, nous avons un problème ici. Nous devons également supprimer les articles de commande de la commande qui est supprimée. Donc, je vais laisser cela comme un exercice pour vous. Donc, l'exercice sera juste de supprimer les articles commandés aussi après la suppression de la commande. Et puis je vous verrai dans la vidéo suivante pour voir la solution, comment nous avons mis en œuvre la suppression des articles de commande après que nous avons supprimé la commande.
50. Calculer le prix total d'un commande avec Mongoose: Envoyer le prix total à partir de l'interface n'est pas une bonne pratique. Par exemple, si un hacker a pu envoyer une commande avec un prix total faux en quelque sorte, alors il sera stocké dans ma base de données avec un prix total faux. Donc peut-être que quelqu'un a l'ordre était cent, dix cents dollars, mais il l'a simulé et il l'a fait avec 2$. Quand j'ai une boutique en ligne très occupée, je ne le détecterai pas. C' est donc mieux après que l'utilisateur envoie les éléments de commande, les ID ou les éléments de commande en général au backend. Nous calculons cela en interne dans le backend en fonction de ce que nous avons dans la base de données. Donc la source de la vérité est une base de données. Donc, ce que je dois faire est de faire une boucle sur les éléments de commande que j'ai reçus de l'utilisateur ou du front end. Et puis je résolve les articles de commande. Je reçois le produit lié au produit. Et avec la quantité, je multiplie cela et calcule le prix total. Donc tout vient de la base de données. Alors essayons de le faire. Ici. Nous avons obtenu des ID d'article de commande résolus. Donc, d'une manière ou d'une autre, nous devons remplacer cela par une variable que nous calculons en interne. Alors appelons ça un prix total. Et ce prix total viendra d'une constante où nous allons résoudre ces articles de commande. Donc, de la même façon, nous cliquons sur Créer une constante, appeler un prix total. Parce que nous allons faire une boucle sur les articles de commande exactement de la même manière ici. Donc, nous allons le faire comme promis point tout. Donc ici, je vais obtenir les éléments de commande résolus ID et mapper sur eux. Et je vais obtenir l'ID de l'article commandé. Je vais récupérer l'élément de commande de
la base de données car il est déjà stocké ici dans la base de données. Donc exactement comme ici, disons asynchrone pour notre article de commande. Et nous obtenons l'article de la commande à travers l'attente. Et nous obtenons aussi le modèle de l'article de commande. Et trouver par ID, l'ID que j'ai obtenu ici sur la carte. Et puis à l'intérieur de cet article de commande, nous n'obtiendrons que l'identifiant du produit et la quantité. Nous devons donc également remplir le produit. Et pour le rendre plus rapide, nous ne pouvons demander que le prix. Donc ici, je vais obtenir l'article de la commande
retourné avec le champ de produit à l'intérieur, seulement le prix. Et puis je vais aller à Create Constant prix total, un seul. Et je dirai l'article de commande que j'ai obtenu de la base de données, point produit, prix point, parce que nous avons le prix rempli déjà multiplié par la quantité point de l'article de commande. Dans ce cas, je vais obtenir aussi la quantité multipliée par le prix. Je vais obtenir le prix total d'un article. Donc, cartographier sur tout ce tableau, je voudrais après cela, retour, seulement le prix total. Donc ici, je vais avoir un tableau de prix totaux pour chaque article de commande. Essayons donc de consigner ce tableau de prix totaux pour être sûr que tout va bien fonctionner. Et je vais poster une nouvelle demande ou une nouvelle commande. J' ai une erreur ici parce que je suis console journal une promesse. Donc, ici, comme nous l'avons fait auparavant, que nous avons ici seulement une promesse, retourné, promis du tout, toutes promesses combinées, nous avons mis un poids. Donc c'est tout simplement que nous pouvons aussi mettre un poids ici, comme le poids et résoudre cette promesse après tout est fait à l'intérieur. Essayons encore. Redémarrez notre serveur. Essayez de poster. Nous verrons ici que nous avons eu un tableau de deux articles ou des articles de commande avec leur prix total. Nous devons donc faire fusionner ou résumer ces deux prix à un. Pour ce faire, nous ne pouvons pas simplement faire un prix total constant. Et ce tableau de prix total, je vais le réduire. Et c'est une méthode réduite. C' est un moyen célèbre d'obtenir la somme de tous les nombres à l'intérieur du tableau. Donc j'ai a et b, retournez pour moi un plus B. Et ici nous ajoutons un 0. Donc, la valeur initiale est 0, puis combinez a et B, ou combinez chaque élément de ce tableau. Donc, ici, après avoir obtenu le prix total, nous pouvons le placer ici, redémarrer notre serveur, placer une demande, et nous verrons que nous avons créé une demande de poste avec la commande. Et le prix total est 146, qui est combiné de deux articles de commande. Prenons aussi ce détail de commande. Nous allons ici, nous le mettons dans la demande GET pour obtenir les détails. Donc, nous allons voir le premier produit, nous avons un 32 et la quantité est trois. Et aussi le deuxième produit est la quantité 2, et le prix est de 25. Le prix total sera de 146. De cette façon, nous garantissons que le prix total provient uniquement de notre base de données, pas de l'avant. Donc, tout d'abord, nous avons créé les articles de commande comme nous l'avons vu auparavant. Ensuite, nous avons obtenu le prix, prix
total de chaque article de commande, puis nous les combinons ou les résumons en un seul numéro. Et puis nous avons créé la commande avec le prix total, qui vient totalement de la base de données.
51. Obtenez des ventes de magasin à l'adresse totales en utilisant $sum: Comme toujours. Et à la fin de chaque module, nous faisons toujours un message ou une demande GET de certaines données statistiques. Ce qui m'est venu à l'esprit ici que par exemple, je veux montrer dans le tableau de bord du panneau d'administration de l'application combien de totaux collines j'ai dans mon e-shop entière. Donc, le propriétaire de la boutique, quand il a enfermé dans le panneau d'administration, il voit le total des ventes et il sera heureux. Donc, comme toujours, créons une requête get. Et la route sera obtenir et le total des ventes. Et ici, nous allons, après avoir passé cette API, après les commandes, nous obtiendrons le total des ventes. Donc, ici, nous avons async, demande et réponse. Et ce sera une méthode ROM. Et nous définissons une variable, nous l'appelons le chiffre d'affaires total. Et nous obtiendrons le total des ventes directement de MongoDB. Donc, en utilisant Mongoose, ici, j'ai attendu, le modèle de commande. Ensuite, j'utilise une méthode appelée agrégat. Et l'agrégat, je peux regrouper comme jointure, nous pouvons dire dans la base de données relationnelle, toutes les tables ou tous les documents à l'intérieur de cette table à un. Et puis j'obtiens un de ces champs dans cette table et j'utilise l'une des méthodes Mongoose, comme par exemple, certains sur ce champ. Donc, il retournera pour moi la somme de tous les champs, quel nom, Prix total. Si vous vous souvenez, nous avons un prix total calculé déjà, comment nous avons vu dans la conférence précédente dans chaque ordre. Nous devons donc résumer tous ces prix totaux en un en utilisant certains. Donc, pour ce faire, nous avons ici un objet. Nous sommes en train de regrouper la table. Et ici, à la méthode, nous disons que l'ID est nul. C' est comme ça. Et nous nommons le champ que nous voulons retourner dans notre API. Donc, je dis que le total des ventes est la somme. C' est un mot réservé en Mongoose du prix total. Le prix total est un champ dans la commande, et nous l'avons calculé ici pendant que nous créons la commande. Alors je vais obtenir le total des ventes en résumant tous les prix totaux. Ensuite, nous vérifions s'il n'y a pas de ventes totales, puis retourné pour moi, erreur response.status. Et puis par exemple, nous disons 400. Pas d'envoi, la commande, ventes ne peuvent pas être générées. Sinon, nous disons réponse point envoyer. Le total des ventes est le total des ventes. Essayons ça maintenant avec Postman, je vais ici, je dis obtenir le total des ventes. Nous avons envoyé une demande. Nous voyons que nous avons tableau avec ID null et les ventes totales. Nous avons donc vu que nous avons obtenu exactement ce que nous avons construit dans le groupe. Donc, si je supprime cet ID null, j'aurai une erreur car Mongoose ne peut pas renvoyer d'objet sans ID ou ID d'objet 2, comme nous le voyons ici dans cette erreur, il dit qu'une spécification de groupe doit inclure un ID. Il vaut mieux le remettre. Ou vous pouvez également donner de l'ID en utilisant les spécifications Mongoose, Il est préférable de le mettre comme null. Donc nous avons vu ici que nous avons un tableau. Nous pouvons également directement BOP cette baie et prendre seulement le total des ventes. Donc, nous pouvons dire ici, retourné pour moi les ventes totales point pop parce que c'est un tableau. Et puis le total des ventes. Donc, dans ce cas, j'ai obtenu le premier élément de ce tableau, ou l'élément léger car il ne retourne qu'un tableau avec un élément. Donc, je dis, donnez-moi cet article et le total des ventes que j'ai spécifié ici. Nous essayons encore une fois. Nous envoyons cette demande, nous obtiendrons le total des ventes est 290 à cela parce que nous avons ici, si nous obtenons la demande, nous avons des commandes. Donc, le premier ordre a 146 et le deuxième ordre a aussi 146. Nous pouvons également obtenir combien de commandes sont créées ou passées dans ma boutique avant comment nous faisons un compte total des produits. Donc, nous pouvons ici copier ceci à partir de l'API du produit et le placer dans les commandes. Et nous disons ici ou là, compter notre sous-dénombrement ou le compte du titulaire du compte et ici l'ordre. Et avec les documents de comptage, nous obtiendrons le décompte et retournerons dans notre compte de commande, puis nous l'obtiendrons. Essayons encore ça dans notre Facteur. Donc ici, je dis GetCount. Et nous verrons que nous avons trois ordres. Donc maintenant notre API pour les commandes est terminée. Nous sommes maintenant prêts à utiliser toutes les API liées aux commandes dans le front end. Et dans la section suivante, nous allons revenir au produit pour télécharger les images. Vous vous souvenez, nous avons ici des images et des images. L' image sera l'image principale de leur produit, et les images contiendront les images de la galerie de leur produit. J' espère que vous avez apprécié cette section et vous voir dans la prochaine.
52. Obtenir des commandes de l'utilisateur: Au premier plan, lorsque l'utilisateur est connecté, il a besoin de savoir quelles commandes il a commandé dans l'historique. Nous avons donc besoin d'avoir au moins un historique des commandes. Donc, de cette façon, cette API sera exactement comme obtenir le moins de commandes, quelque chose comme ça, mais elle sera spécifiée uniquement pour un utilisateur spécifique. Prenons donc ces requêtes GET et copions-les vers la dernière. Et nous dirons ici que je veux obtenir, par
exemple, les utilisateurs plus âgés ou les commandes des utilisateurs. Et nous devons spécifier en tant que, par
exemple, en tant que paramètre, l'ID utilisateur. Donc, ici, nous disons l'ID utilisateur. Donc, quand j'envoie une demande du frontal ou de notre API, nous devons spécifier l'ID utilisateur pour lequel je veux obtenir les commandes. Et comme une condition pour la recherche, nous disons objet, champ
utilisateur doit être la requête point params point. Le même paradigme que j'ai ici, l'ID d'utilisateur. Et peut-être que nous n'avons pas besoin de remplir l'utilisateur lui-même. Nous devons remplir les produits à l'intérieur de cette commande. C' est donc exactement comme nous l'avons fait ici dans le détail de la commande, comment nous avons rempli les articles de commande, les produits et la catégorie. Nous copions le même et nous le passons ici. Donc, dans ce cas, nous verrons que les articles de commande sont remplis avec les produits et ils ont commandé du plus récent au plus ancien pour ne pas avoir de noms déroutants. Renommons ça. Par exemple, nous pouvons dire utilisateur ou leur liste. Et ici la liste des commandes utilisateur ici aussi l'utilisateur ordonné. Exécutons le serveur. Ph commence. Le serveur exécute la connexion à la base de données prête ? Nous essayons ça dans Facteur. J' ai donc ici des ordres, obtenir des ordres d'utilisateur, et je passe l'ID de l'utilisateur, que je veux avoir ses ordres. Donc je passe celui-là et j'ai d'autres objets. Ils ressemblent à ça. Et une autre commande, il a également des articles de commande. Nous avons donc les trois commandes pour cet utilisateur. Nous verrons ici le même nom d'utilisateur sont le même ID d'utilisateur. C' est toujours n égal à 4, 4. Et voici un autre. Donc, à la fin de cette section, vous verrez que vous êtes en mesure de créer toutes les requêtes ou toute API dont vous avez besoin en fonction de ce que les besoins dans le front end. Ainsi, par exemple, nous avons obtenu ici les commandes de l'utilisateur et aussi nous avons obtenu, par
exemple, combien de commandes j'ai dans mon problème. C' est tout au sujet des API. Dans la section suivante, nous allons apprendre à télécharger des fichiers sur notre serveur, comme des images ou des pièces jointes en général. Dans cette conférence, il y a pièce jointe
du code de ressource où nous sommes arrivés dans ces ordres. Et vous pouvez le télécharger et essayer par vous-même de faire des choses différentes avec les API en fonction de vos besoins.
53. Télécharger l'image et la galerie de produits: Maintenant, nous arrivons au dernier module, qui concernait le dos et le développement. Nous devons maintenant télécharger les images avec notre produit, comme nous l'avons vu auparavant, le produit contient deux champs. L' un d'eux est une image principale et le second champ est les images. Alors, où sera plus de description sur le produit comme une galerie d'images ? Donc, dans ce module, vous verrez l'étape principale est l'installation de la bibliothèque Walter. Library est une bibliothèque célèbre utilisée pour télécharger des fichiers sur le serveur à l'aide de Node.JS. Et dans la deuxième étape, nous trouverons la meilleure configuration pour notre e-Sharp car nous devons configurer cette bibliothèque pour utiliser et télécharger les fichiers sur notre serveur. Le troisième, nous allons voir comment utiliser la destination et téléchargé les noms de fichiers. Toujours lorsque l'administrateur télécharge un fichier ou une image, il doit spécifier le nom du fichier. Mais non, nous ne pouvons pas le faire pour l'administrateur ou pour l'utilisateur. Nous n'avons pas à le laisser nommer le dossier. Vous pouvez télécharger n'importe quel fichier et il sera codé dans notre serveur. Utiliser Postman est également très important pour notre cas ici pour tester le téléchargement d'image, nous allons voir comment tester le téléchargement d'image avec un facteur en utilisant le téléchargement d'un fichier ou plusieurs fichiers. Et nous ne permettons pas à l'utilisateur de télécharger quoi que ce soit. Nous avons besoin qu'il télécharge uniquement des types spécifiques d'images, comme avec l'extension PNG pour J Beck. Et bien sûr, tout cela fait pour un seul fichier. Maintenant, nous devons étendre la bibliothèque pour permettre de télécharger plusieurs fichiers. Et plusieurs fichiers sont nécessaires pour que nous puissions télécharger de nombreuses images pour la galerie de produits. Et enfin, nous allons voir comment récupérer ce produit avec les images et les images de la galerie pour les voir en avant. Bien sûr, nous allons chercher seulement l'URL de l'image. J' espère que vous apprécierez ce module et vous verrez dans la prochaine conférence où nous allons commencer à installer la bibliothèque de mortier.
54. Configurer le chargement de serveur: Ok, donc nous devons d'abord configurer le back-end pour accepter le téléchargement des fichiers. Pour ce faire, nous devons installer une bibliothèque appelée Walter. Comme n'importe quelle bibliothèque, npm installe Walter. Et avec cela, nous allons installer la bibliothèque et l'utiliser pour télécharger des fichiers sur notre serveur. Et comme toujours, nous faisons constante, Walter et mortier requis. Voyons la documentation de cette bibliothèque. Si vous allez à Google et tapez moteur, vous verrez les paquets MPM, le site npm, où nous avons toute l'utilisation de cette bibliothèque. Pour voir une utilisation plus détaillée ou une utilisation à jour, vous pouvez accéder à la page d'accueil de la bibliothèque. Donc ici, je clique dessus et il me conduirait à la page d'accueil de la bibliothèque de mortier. Donc, l'utilisation la plus simple de cette bibliothèque sera comme suit, comment il est dans la documentation. Donc, tout d'abord, nous avons besoin d'un formulaire et ce formulaire sera fourni par le facteur, comment nous verrons plus tard. Et la première utilisation ici que nous pouvons appeler la bibliothèque molto
, puis la configurer avec une destination sur notre serveur du dossier. Ainsi, lorsque l'utilisateur télécharge un fichier via le formulaire, il sera stocké dans le dossier uploads, qui sera à la racine de l'application back-end. Et après cela, dans chaque demande de poste, par exemple, nous avons un article de produit que nous devons passer non seulement l'URL et la fonction de demande et de réponse, nous devons également passer le téléchargement, je veux dire le téléchargement de Walter. Donc ici, nous pouvons passer le téléchargement et nous disons un seul, nous passons le nom du champ, qui est vu de l'extrémité frontale. Donc, comme vous le voyez ici, le nom du champ s'appelle Avatar, et ici il est passé dans la requête. Mais ici, le fichier téléchargé sera exactement le même nom où l'utilisateur l'a téléchargé. Donc, nous aurons un problème quand un client, ou désolé, l'administrateur va télécharger le fichier. Il aura, par exemple, un autre fichier portant le même nom. Donc, ce fichier remplacera l'ancien fichier. Et dans ce cas, nous avons un problème entre les produits peut être que je vais perdre des noms de produits ou des images de produits. Donc, la meilleure façon nous avons besoin d'avoir plus de contrôle sur le nom des fichiers et le nom de la destination. Ainsi, par exemple, nous avons besoin, chaque fois que le fichier téléchargé est téléchargé, nous devons le renommer en quelque sorte, un nom unique, puis le stocker dans notre serveur. Pour ce faire dans plusieurs bibliothèques, il existe une autre option d'avoir un contrôle complet sur le nom des fichiers, qui est appelé stockage sur disque. Et avec cet exemple, nous allons construire notre API de téléchargement. Donc, nous allons utiliser cette partie. Prenons exactement la même chose et copiez-le dans notre application. Et nous dirons que le stockage est le stockage sur disque Walter, qui a deux champs, le contrôle de la destination et le contrôle du nom de fichier. La destination sera une fonction où il a la requête elle-même et le fichier et le rappel. Le rappel sera retourné s'il y a une erreur dans le téléchargement et nous y assignons la destination. Donc, ici, mettons notre destination de téléchargement. On peut l'appeler public et les uploads. Donc, nous avons ici, nous aurons un dossier appelé téléchargements publics. Nous pouvons créer ce dossier. Donc, nous pouvons dire ici dans le back-end, nous pouvons dire uploads. Et à l'intérieur, ou désolé, on pourrait avoir public d'abord. Public. Et il est public sera au niveau de la racine. Donc, il aura, par exemple ici. Et le public, le dossier des téléchargements sera à l'intérieur. Donc, ici maintenant, nous avons des téléchargements publics. Donc, à l'avenir, lorsque nous téléchargerons le fichier, nous le verrons ici situé directement dans les téléchargements publics. Dans le nom du fichier. Ce sera la même chose. Il contiendra la requête rock et le fichier. Et nous devons en quelque sorte renommer le fichier pour qu'il corresponde nos besoins et comment il sera localisé dans les téléchargements. Il y a donc une autre façon comme il crée ici. Par exemple, le, certaines mathématiques aléatoires pour avoir un nom aléatoire de l'application ou sur le fichier. Et puis il a mis le nom de fichier original avec tiret et le suffixe unique qu'il a créé auparavant. Faisons une autre façon. Donc, je créerais une constante. Appelons ça un bon nom. Et ce nom de fichier sera le fichier lui-même que nous avons obtenu ce nom d'origine. C' est déjà défini. Et puis nous disons, en quelque sorte pour remplacer les espaces, ce n'est pas agréable d'avoir des espaces dans le nommage des fichiers sur le serveur. Parce que lorsque vous avez l'URL, vous aurez l'URL laide où elle remplacera comme par esperluette t2 pour les espaces. Mais ici, nous pouvons avoir exactement notre remplacé les espaces avec split. Donc, je fractionne le nom de fichier en fonction de l'espace et le remplacement ou la jointure. Encore une fois cet espace avec un tiret. Vous pouvez également utiliser une autre méthode, qui est par exemple
, remplacer chaque espace par un tiret. Les deux voies vont bien. Donc, nous pouvons également ajouter un préfixe ou un suffixe à ce nom. Donc, ici, nous pouvons dire le nom du fichier. Et par exemple, nous pouvons dire beaucoup de date maintenant. Donc, ici DataNode maintenant méthode, si nous le voyons,
il retournera le numéro du jour. Donc, nous pouvons l'essayer avec la console du Google Chrome. Tu peux dire rencard maintenant. Et vous verrez que vous avez le numéro de la date et de l'heure maintenant. C' est donc un grand numéro unique pour créer nos fichiers. Donc, après cela, nous avons créé une constante. Faisons-le comme une constante, pas comme un VAR. Et cette constante est appelée upload. Encore une fois, appelez-le, par exemple, les options de téléchargement. Et ces options de téléchargement, nous devons le transmettre à notre demande de poste où nous créons le produit exactement de la même façon qu'il est décrit dans la bibliothèque de Malte. Donc, si nous voyons ici que nous avons aussi le simple de téléchargement et Avatar et le nom du champ. Nom du champ, nous devons l'envoyer de l'avant. Donc, ici, nous disons les options de téléchargement, point ,
unique, et le nom du champ où je veux envoyer à partir de l'extrémité frontale. Donc, je dis, par exemple, l'image. Mais ici, lorsque nous créons le produit, nous analysons l'image de point de corps de requête point. C'est faux. Nous devons éditer ce champ pour avoir le chemin complet de l'image. Donc je suis Walter nous a déjà envoyé avec cette demande, le dossier. Donc, nous ne pouvons pas dire par exemple, fichier
constant est le fichier point de requête, le nom de fichier point. Et ce nom de fichier venant d'ici où nous avons configuré le nom de fichier du fichier téléchargé. Donc, nous aurons le nom exactement comme nous l'avons de cette façon. Comme le nom d'origine du fichier, remplacé par des tirets, puis tiret, ils ne savent pas. Faisons-le de cette façon. Nous avons un nom de fichier et ensuite nous mettons le nom de fichier ici. Mais quand je veux récupérer ces données dans le front end, et je veux voir le, OU par exemple, afficher l'image dans le front end. Je vais avoir une question à ce sujet. Je n'obtiendrai que le nom du fichier. Par exemple, j'obtiendrais l'image 300, 300 points J Beck. Et c'est un problème pour nous parce que dans le front end ne connaît pas le chemin d'origine du fichier. Nous devons en quelque sorte avoir le chemin complet avec l'URL aussi du backend. Donc, je vais dire http, localhost 3000 et le dossier de téléchargement. Et puis l'image avec le nom et l'extension. Nous nous sentons également ici pour ajouter l'extension. Donc, nous avons le nom de fichier seulement comme ça. Nous devons également éditer les options de nom de fichier ici. avoir aussi avec l'extension. Nous verrons cela lorsque nous validons le dossier dans les prochaines conférences. Mais maintenant nous allons nous concentrer sur cette partie que nous avons besoin de l'URL complète, pas seulement le nom du fichier. Pour cela, nous devons construire en quelque sorte cette chaîne. Donc on peut dire constant. Nous pouvons dire chemin de base, comme le chemin de base de leur application. Et nous pouvons le faire avec des ticks en quelque sorte, comme le point de requête. Il a un champ appelé protocole. Et ce protocole retournera pour moi le HTTP. Et puis nous verrons que nous avons une barre oblique deux-points et nous devons passer l'hôte. Nous pouvons donc le faire de la même manière. Nous pouvons dire demander point get, obtenir un champ spécifique appelé hôte. C' est un moyen d'obtenir l'hôte à partir de la requête. Alors maintenant, nous construisons notre chemin de base. Ajoutons quatre. C'est aussi la partie où nous disons le dossier où il est téléchargé. Nous devons donc ajouter aussi cette partie. Donc on peut le dire comme ça. Et puis nous ajoutons seulement le nom de fichier. Donc, nous pouvons dire ici, après cela, nous avons des backticks, chemin de
base, et le nom du fichier. De cette façon, nous construisons notre URL API ou URL de fichier téléchargé. De cette façon, nous avons le chemin de base est cette partie et le nom du fichier, qui est cette partie. Essayons ça maintenant avec le facteur. Et essayez si tout fonctionne bien.
55. Tester le chargement d'images avec Postman: Maintenant, testons nos changements avec Postman. Vous vous souvenez, nous avons créé ici le champ d'image, qui aura le chemin et le nom de fichier qui est téléchargé. Je vais chez Facteur. Nous devons créer une demande de publication sur l'API du produit et nous ajoutons l'autorisation avec le jeton de barrière que nous avons obtenu auparavant. Et nous avons le jeton ici pour vous rappeler que
nous avons obtenu ce jeton après avoir obtenu un utilisateur connecté. Alors je vais y aller. Et puis je regarde dans un utilisateur avec son e-mail et son mot de passe, puis je vais obtenir le jeton. Ceci. Si vous ne savez pas comment obtenir ce jeton, ce que nous avons expliqué dans le chapitre de l'utilisateur. Ok, mais maintenant comment on peut tester Postman pour télécharger des fichiers. Vous vous souvenez que nous envoyions le corps de la demande en tant que JSON, et que nous créions le JSON ici et nous mettions
le nom du produit ou la description du produit ou la description et le prix. Mais ici, ce sera un peu différent. À l'avant, ce sera quelque chose comme une forme. Formulaire était des champs comme vous le voyez à droite de l'écran. Donc, ici, nous avons un champs où nous allons le remplir et les envoyer au backend. Et le champ de fichier où l'utilisateur peut télécharger un fichier. Cela sera rempli avec des données de fichier, et les données de fichier seront envoyées au backend via une donnée de formulaire. Donc, nous devons créer quelque chose comme une donnée de formulaire et un homme gaufré. Si vous souhaitez simuler un formulaire, vous pouvez créer des données de formulaire et chaque champ sera nommé ici avec sa valeur. Par exemple, j'aurai ici le nom du produit. Et par exemple, le produit que je veux poster sera le produit six. Et je veux aussi, par exemple, une
description du produit. Et ici sera produit cherche description. Nous devons donc mettre en quelque sorte tous les domaines que nous voulions comme nous l'avons vu précédemment, le modèle de produits que nous avons ici. La description lit, description, images et tout ici. Donc nous avons besoin du champ d'image, laissez-moi sentir les champs ici dans le facteur. Et puis nous parlerons des images. Donc, ici, nous avons rempli tous les champs
de formulaire que nous devions envoyer au backend et avec leur valeur. Donc, pour l'image ici, il sera evalue, ne sera pas, par
exemple, des textes comme ici, ou une valeur, ou un nombre ou un booléen. Ce sera un fichier. Alors comment on peut faire ça en tant que fichier ? C' est très simple. Nous avons facteur, Il y a un truc que quand vous mettez
la souris, le champ, où voulez-vous changer ? Vous pouvez sélectionner que le type de ce champ peut être un fichier. Lorsque vous mettez le fichier, vous aurez la possibilité de sélectionner un fichier à partir de votre PC. Exactement comme la façon dont vous téléchargez un fichier dans le formulaire Web. Alors sélectionnons une image. J' ai ici, beaucoup d'images, par
exemple, celle-ci. Et nous allons le télécharger et envoyer la demande de poste. Nous verrons que la demande de poste est créée exactement comment nous l'avons fait dans le backend. Et nous avons l'image comme une URL complète. Et le fichier image avec la même extension ici. Mais si vous voyez ici que nous avons une extension et ensuite le nom, donc nous avons un problème ici. Donc, nous devons en quelque sorte exclure cette extension et mettre ce point de date maintenant après, puis nous mettons l'extinction à la fin. Faisons ça vite. Nous allons changer leur configuration ici du nom de fichier dans Walter pour obtenir le nom de fichier dérivé avec l'extension. Donc, changeons cette partie avec les backticks sera plus agréable dans le code. Donc on peut avoir le nom de fichier tiret, ce doc de date maintenant. Et nous avons besoin ici pour ajouter en quelque sorte l'extension afin que nous puissions dire point et ici ce sera l'extension d'où je vais obtenir l'extension. Dans la prochaine conférence, nous verrons comment valider ces fichiers qui arrivent au back-end. Nous avons donc besoin que l'utilisateur ne télécharge que le type spécifique d'images. Nous avons besoin de lui pour télécharger seulement JPEG et PNG. Nous ne pouvons donc pas le laisser applaudir, par exemple, un fichier PDF ou, par exemple, un fichier XML. Nous avons donc besoin d'une manière ou d'une autre du back-end pour refuser une requête quand il n'y a pas d'image. C' est ce que nous allons faire dans la prochaine conférence.
56. Valider les types de fichiers téléchargés: Ok, maintenant nous devons créer notre extension. Mais d'abord, nous avons dit que nous devons valider les fichiers téléchargés de l'utilisateur. Pour ce faire, nous devons créer une liste de fichiers qui sont autorisés à accepter ce backend complet. Donc, nous pouvons définir une constante. Nous disons la carte de type de fichier. Et cette carte de type de fichier contiendra une liste d' extensions qui sont autorisées à être téléchargées sur mon back-end. Le premier champ sera l'image PNG. Et puis PNG. Pourquoi je l'ai fait de cette façon. Donc ici, nous avons la clé comme un point d'image PNG et la valeur est un PNG. Cela nous en avons besoin à cause du type mime. Type de mime. Si vous le Google, c'est le type immédiat et connu sous extensions de messagerie Internet
multifonction ou de type mime. Et c'est une norme qui indique la nature et le format d'un fichier de document. Chaque requête est envoyée au backend. Et le fichier qui contient le fichier de données ou les données de fichier, a également un type mime. Un type mime a un format comme celui-ci. Donc, je reçois et PNG document dxdy. Donc, de cette façon, je peux définir quel est le type du fichier qui arrive au backend. Les trois types les plus importants dont nous avons besoin dans notre back-end sont PNG, JPEG et JPEG. Donc, ici, nous aurons ces types. Et dans Walter, quand je veux configurer le nom du fichier, je peux trouver ici quelque chose appelé type mime. Donc, le type mime inclura les informations ou les informations de fichier avec la station d'encre du type mime ici. Donc, pour avoir la bonne extinction, nous le ferons de cette façon. Const extension égale au labo
de type de fichier et obtenez la valeur de Type mime de lot de fichiers. Donc, ici, il ira à ce tableau et prendra le type mime, qui vient l'un d'entre eux, puis assigner l'extension comme une valeur. Et ici, je vais obtenir la valeur ou l'extension de mon nom de fichier. Ok, on a parlé de validation du dossier. Donc, nous devons en quelque sorte valider le fichier s'il est autorisé à être téléchargé ou non. Dans le rappel de la destination, vous pouvez définir une erreur. Donc, quand il y a une erreur, le rappel va le lancer ici. Donc, d'abord, nous pouvons faire une constante est un fichier valide par exemple. Et nous allons utiliser le même concept ici. Donc, il obtiendra le type mime et vérifiera
s'il est trouvé dans la carte que j'ai assignée dans mon back-end. Et dans Node.JS, nous pouvons définir une erreur. Donc, je peux dire ici, laissez l'erreur de téléchargement est égale à nouvelle erreur. Et nous pouvons dire que l'erreur est un type d'image non valide. Et puis nous pouvons vérifier s'il y a, est valide. Ensuite, faites cette erreur de téléchargement en tant que nonne. Et puis utilise l'erreur de téléchargement dans le rappel. Donc, si le fichier est valide, il n'y a pas d'erreur et le rappel sera exécuté. Donc vous vous souvenez, nous avons téléchargé avec Postman un fichier et il a ce nom. Donc maintenant, nous n'aurons pas ce JPEG ici. Nous l'aurons à la fin. Peut-être qu'il restera ici, mais nous aurons au moins une extension à la fin. Testez ça avec un facteur. Maintenant, avec notre formulaire, j'ai les mêmes données, même image que j'ai téléchargée. Envoyez cette demande, j'ai eu l'image téléchargée. Et vérifions l'extension. Nous verrons qu'il a l'extension à la fin et le nom du fichier. Et voici l'image qui fonctionne bien. Essayons maintenant de télécharger un fichier, mais pas l'image. On peut dire, par exemple, un PDF. Donc, j'ai ici un test PDF. Je vais le télécharger. Et on a eu l'erreur. Donc, nous avons eu une erreur, ce type d'image non valide, que nous avons créé ici. Donc, ici, en première ligne, nous avons vu que lorsque nous avons téléchargé le PDF, nous avons eu le problème. Mais quoi, par exemple, J peg, envoyer cette requête. Nous n'avons aucun problème. Nous avons le chemin complet et nous avons aussi l'extension. Et chaque fois que je fais une demande de téléchargement, je reçois une nouvelle donnée et une nouvelle date et le fichier, c'est le même, mais il est téléchargé à nouveau avec un nom différent. En allant dans notre base de données sur Atlas, nous pouvons vérifier le fichier ou le produit qui est créé. Nous verrons que le produit a l'image et il a une URL complète. Cela sera donc accessible à partir de n'importe où dans notre application. Mais nous devons avoir quelque chose comme exclu de l'authentification. Parce que si vous vous en souvenez, toutes les API sont authentifiées. Donc, nous ne pouvons rien faire sans être authentifiés. Mais nous avons besoin que cela soit public, ce que nous verrons dans les prochaines conférences. Dans la prochaine conférence, nous verrons si le fichier existe vraiment. Donc, s'il n'y a pas de fichier ou d'image pour le produit, nous devons rejeter la demande.
57. Télécharger l'image avec une demande de post-produit: Que se passe-t-il si le front end m'envoie leur demande sans dossier ? Ensuite, ce champ d'image requis serait refusé pour gérer cela. Vérifions d'abord si nous avons un dossier dans notre demande. Donc, je vais ici et créer une constante, appelez-le fichier et donnez à cette constante la valeur du fichier point de requête. Et exactement avec la catégorie, nous pouvons faire la même chose avec le fichier. Donc, je dis s'il n'y a pas de fichier, alors renvoyez une erreur à l'utilisateur qu'il n'y a pas de fichier. De cette façon, nous serons sûrs que notre demande ne passera pas sans un fichier. Lorsque nous allons à Postman et envoyer la demande sans fichier, nous obtiendrons qu'il n'y a pas d'image dedans les demandes. Dans la prochaine conférence, nous allons voir comment utiliser des images pour télécharger plusieurs images, qui seront, par exemple, une galerie sur le produit. Ainsi, dans une requête, l'utilisateur enverra plusieurs fichiers, pas un seul fichier. Et cela se produira dans le champ des images.
58. Télécharger l'image avec la demande de produit: Lorsque nous devons aller semaine pour mettre à jour un produit, aussi, nous devons nous soucier de l'image. Que se passe-t-il si l'utilisateur veut télécharger une nouvelle image sur son produit, comme s'il voulait mettre à jour l'image elle-même. Pour cela, nous ferons les mêmes étapes que celles que nous avons faites pour le poste. Nous devons donc ajouter les options de téléchargement à la requête PUT. Donc, nous l'avons ajouté ici et nous allons faire quelques changements ici. Donc, d'abord, si l'utilisateur ne télécharge aucune image, alors je veux garder l'ancienne image qui est dans la base de données. Mais s'il télécharge une image, alors j'ai besoin d'envoyer et de télécharger à nouveau l'image dans les fichiers, puis ajouter la nouvelle URL à la base de données. Faisons écho à ce chien. Donc, tout d'abord, je veux trouver le produit. Donc, j'ajoute ici une constante appelée un produit et le produit trouver par ID, demander dot powerapps dot ID, et puis je vérifie s'il n'y a pas de produit, puis retourné pour moi l'état 400, qu'il est un produit non valide, OK, maintenant tout va bien. Ensuite, nous garantissons que l'utilisateur est vraiment entré dans un produit spécifique et arrivé. Une autre chose, alors nous obtiendrons le fichier lui-même. Donc, je vais dire que le fichier const et ce fichier, nous sommes venus avec leur fichier point de requête comme nous l'avons fait exactement avec une demande de poste. Et puis je vais définir un chemin qui est appelé chemin d'image. Et ce chemin d'image est vide. Je vais l'utiliser pour remplir le chemin de l'image. Soit ce sera l'ancien qui est déjà dans la base de données, soit alors vous chemin du fichier si l'utilisateur a téléchargé une nouvelle image dans la requête PUT. Donc, comme une logique, je vais dire si le fichier, alors exactement comment nous faisons avec la demande de poste. Je vais définir un nom de fichier, puis du chemin de base. Et je dirai que le nom de fichier ou le chemin d'image sera exactement le même que nous l'avons ici. Donc, nous aurons le chemin de base et aussi le nom de fichier ensemble comme bain d'image. Et sinon, s'il n'y a pas de bain d'image ou s'il y a Fichier, alors je dirais que le chemin d'image est le même que l'ancien chemin d'image qui a été défini précédemment lorsque le produit a été créé. Donc je dirais produit, cette image, l'ancienne parce que j'ai eu l'année productive et je vous garantis que le produit existe vraiment. Donc, je ne lance pas d'erreur à l'utilisateur. Donc, à coup sûr, le produit a une valeur ici. Et puis je dirai que si c'est cinq, alors téléchargez le fichier et donnez-moi le passé. Sinon, donner le chemin d'image sera l'image du produit, qui était précédent. Et puis ici, je dirai que l'image sera le chemin d'image avec les données mises à jour. Mais ici, nous allons renommer ce produit. Donc, nous pouvons dire un produit ici pour obtenir le produit. Et nous pouvons dire ici, produit
mis à jour et le produit mis à jour, je le trouve, puis le vérifier et puis renvoyer cette demande avec les données mises à jour. Ce sont donc les changements requis pour la demande de poste. Dans ce cas, vous n'obtiendrez aucune erreur et vous aurez des problèmes lorsque vous
téléchargez à nouveau l'image ou lorsque vous ne téléchargez pas l'image. Donc, ils l'utilisateur ici a l'option, il peut télécharger l'image ou non dans la requête PUT.
59. Galerie de produits: Ok, ici nous avions un seul fichier, donc nous avons téléchargé un seul fichier sur l'API. Mais ici, nous avons besoin de plusieurs fichiers pour la galerie de produits. De la même manière, nous pouvons changer cette demande de poste pour accepter également plusieurs fichiers. Mais rendons cela un peu plus compliqué d'avoir un véritable exemple pratique. Normalement, lorsque vous mettez à jour un produit ou ajoutez un produit, la deuxième chose que vous faites est de télécharger la galerie d'images. Et cela arrive normalement dans les boutiques en ligne. Après avoir créé un produit, tout va bien. Ensuite, vous allez modifier à nouveau le produit pour supprimer la galerie d'images. Nous allons donc créer un ABI spécifique uniquement pour télécharger la galerie du produit. Cette API sera une demande de mise à jour, pas une demande de publication. Nous avons donc besoin de la demande de poste. Donc, je copie cette demande de poste. Allons à la fin et ajoutez-le ici. Et plus loin, nous pouvons garder l'identifiant du produit et aussi nous pouvons ajouter leur doute où nous allons mettre à jour uniquement les images de la galerie. Donc, ici, nous pouvons ajouter des images de galerie. Et puis l'ID du produit. Comme nous l'avons vu précédemment dans la demande de poste du produit, nous avons ajouté aussi l'option Upload image unique. Nous pouvons également l'ajouter à la requête PUT. Donc, nous pouvons ajouter ici des options de téléchargement, mais pas unique. Nous dirons tableau. Donc, nous allons attendre du front de notre tableau de fichiers, appelons-le émet. Et si vous remarquez ici que la méthode du tableau me donne aussi un nombre maximal. Ainsi, vous pouvez autoriser la taille maximale de téléchargement de fichier. Donc, par exemple, je dirai maximum, j'ai besoin de 10 fichiers ou 20 fichiers en une seule requête. Alors mettons-le comme 10. Faisons plus notre code. Alors faisons ça dans une nouvelle ligne. Donc on ne peut pas dire que celui-là est là. Et ici, la méthode asynchrone. Et ici, nous avons le port et nous avons ici le contenu de notre demande PUT. Donc, la demande de mise à jour de leur produit sera mis à jour exactement ces données, mais nous aurons seulement les images, pas toutes les données. Donc nous pouvons faire la même chose que nous l'avons fait ici. Il est copier cette partie pour voir si l'utilisateur transmet l'identifiant exact ou correct. Nous n'avons pas besoin de vérifier leur catégorie car nous ne sommes pas mis à jour. Alors, prenons celui-ci aussi. Mais comme nous l'avons dit, nous avions toutes les données. Nous devons mettre à jour uniquement l'image. Donc champ d'image sera tableau d'images. Donc, comme nous l'avons vu ici, tableau de chaînes d'image ou chemin de l'image. Nous avons donc besoin ici d'une manière ou d'une autre pour construire un tableau de chaînes. Donc nous pouvons entendre, disons, les tampons d'image. Et ces projecteurs d'image seraient un tableau précieux comme des chaînes. Alors, comment allons nous construire ce tableau d'abord dans cette requête, comme nous l'avons vu précédemment, que nous pouvons avoir un fichier point de requête. Ou si vous voyez que nous avons un fichier aussi non seulement. Donc, nous pouvons dire que les fichiers seront des fichiers constants. Et exactement comme avant, on peut vérifier s'il y a des fichiers. Ensuite, je vais faire une boucle à l'intérieur de ces fichiers et construire le tableau des images dérange. Donc ici, je vais déplacer cela et dire les fichiers point map. Et cela aura un dossier. Et à l'intérieur de cette méthode de fichier, nous pouvons dire que le chemin d'image est point push, le nom de fichier point fin. Mais nous n'avons pas à pousser le nom du fichier seulement. Nous devons pousser aussi l'URL de base et aussi avec l'extension. Donc, si vous vous souvenez, nous avons créé ici l'URL de base, que nous construisons pour les demandes de poste. Donc, nous pouvons copier cette partie aussi et aller à la méthode put et dire ici l'URL de base ou le chemin de base. Et nous poussons le chemin de base avec le nom du fichier. Et ici, nous pouvons retourner le produit. Donc exactement comme la demande PUT, nous pouvons vérifier s'il y a produit, alors c'est que les étangs soient les données du produit. Sinon, ce sera une erreur. Donc nous copions cette partie et la plaçons ici. Testez ça avec Postman sur ce qu'on a à faire avec le facteur, qu'on place plusieurs fichiers ici. Donc, créons un champ, appelons-le, par exemple, image. Et cette image sera un fichier. Et nous sélectionnons deux ou l'image par exemple. Et nous n'oublions pas cela pour changer l'API. Donc, voici l'image de la Galerie et la demande est mise. Et nous avons également besoin de l'identifiant du produit. Exactement celle-là. Nous allons obtenir notre produit, ou le produit est le produit six, que nous avons créé auparavant. Et maintenant, nous allons ajouter l'ID ici. Et nous enverrons cette demande. Nous avons notre erreur, j'ai oublié ici d'ajouter des produits. Nous aurons donc le bon chemin. Maintenant, nous essayons. Et puis nous verrons le produit a été mis à jour. Et nous avons deux images dans la galerie et l'image principale, Il est toujours là. Vérifions notre dossier de téléchargements. Nous verrons que nous avons deux images, celle-ci et celle-ci. Donc, dans le front end, toujours nous allons mettre à jour notre galerie ou mettre à jour un produit et y ajouter les images de la galerie. C' est tout au sujet de cette section. Dans la section suivante, nous allons voir comment récupérer l'URL de l'image, afin que nous puissions la voir dans le navigateur et dans le front, car maintenant il est verrouillé et nous n'avons pas accès à elle parce qu'il est protégé par notre API authentification.
60. Exclure le dossier de téléchargement de l'authentification: Maintenant, essayons d'obtenir cette URL et de la mettre dans le navigateur, l'URL de l'image. Donc, nous le mettons dans le navigateur et nous verrons que l'utilisateur n'est pas autorisé. Cela parce que si vous vous souvenez, dans notre JWT, nous étions en train de définir le bain est qui sont autorisés pour le public. Nous devons donc ajouter le chemin du dossier de téléchargement pour être autorisé afin que tout le monde puisse voir ces images. Sinon, nous aurons un problème. Ainsi, l'e-shop ne montrera pas les images du produit. Alors copions celui-ci. Ce sera exactement le même Git et les mêmes options. Nous devons également remplacer celui-ci par le chemin du dossier uploads. L' expression régulière pour ceci est celle-ci. J' ai une barre oblique, des téléchargements de slash publics à tout vient après. Sauvegardons ça. Et allons sur notre navigateur. Rafraîchir. Nous verrons une erreur que nous ne pouvons pas obtenir l'image de téléchargement public. Pourquoi cela parce que c'est un dossier statique. Nous devons définir ces téléchargements publics comme un dossier statique dans le middleware de notre application. Donc, pour ce faire, nous devons aller à notre app.js. Donc nous allons ici et nous disons l'utilisation. Et puis nous définissons le chemin dont nous avons besoin pour le rendre statique. Donc les téléchargements de barre oblique publique. Et puis dans Express, il y a une méthode pour dire qu'il s'agit d'un dossier statique et d'un mot-clé réservé, qui est le retour de nom désastreux pour moi le chemin racine ou le chemin racine de l'application. Et plus le chemin que je voulais faire comme un statique. Donc maintenant ce chemin, n'importe quel fichier peut être téléchargé vers elle. Ce ne sera pas comme une API. Ce sera comme un chemin statique qui sert les fichiers. Donc, revenez au navigateur et nous faisons un rafraîchissement. Nous obtenons toujours l'erreur. Cela parce que j'ai besoin d'ajouter une barre oblique derrière le public. Agissez avec notre navigateur et actualisez. Nous verrons l'image que nous avions déjà dans le front end sans aucune authentification directement par l'URL. Maintenant, notre backend est prêt. Nous avons créé les itinéraires, quatre catégories, commandes, produits et utilisateurs, dont nous avons besoin exactement pour notre e-shop. Nous allons maintenant passer à la partie frontale et vous verrez plus que de nouvelles choses et comment nous nous reconnectons à ce backend et créer notre interface webshop.
61. Installer Heroku et préparer Git: Ok, Dans cette section, nous allons déployer notre backend ou notre API Web sur Heroku. Heroku est l'un des outils utilisés pour déployer le projet ou les API Web. Et ils peuvent être publics et nous pouvons les utiliser dans vos projets. Donc, vous n'aurez pas votre API basée uniquement sur localhost 3000 comme nous l'avons vu, mais nous allons le mettre sur une URL et nous pouvons y connecter nos applications frontales. La première étape que nous devons faire, nous devons aller sur un site appelé Heroku.com et ensuite nous sommes invités à être enfermés. Bien sûr, si vous êtes quelques-uns n'avez pas de compte ici, vous pouvez aussi bien vous inscrire. L' inscription est très simple. Il vous suffit de fournir prénom, nom, adresse e-mail. Et quel est votre rôle ? Pays ? Et aussi, vous devez mettre un peu de langage de développement de l'argent Brian. Nous devons mettre NodeJS dans notre cas et vous devez vérifier que vous n'êtes pas un spam et ensuite vous pouvez obtenir un compte. Une fois connecté, vous verrez un tableau de bord comme celui-ci. Donc, ce tableau de bord, nous devons créer une application que nous allons rendre publique pour notre API. Donc, tout d'abord, vous devez avoir créé une nouvelle application. Et cette création d'une nouvelle application, vous pouvez donner n'importe quel nom pour votre application. Dans mon cas, je lui donnerais un nom comme e-shop, backend par exemple. Et peut-être que ce nom ne peut pas être disponible, vous devez
donc spécifier un nom spécifique. Peut-être que vous pouvez donner comme n'importe quel suffixe aléatoire. Par exemple, vous pouvez mettre votre nom de famille. Par exemple, je vais mettre mon nom de famille ou mon nom d'entreprise. Je vais voir, je dirais comme un bits bleus. Donc, dans ce cas, j'aurai l'e-shop retour et des bits bleus. Et puis vous choisissez votre région est préférable d'utiliser la région la plus proche où il est plus proche pour vos clients cibles. C' est donc mieux pour moi dans ce cas, je vis en Europe. Donc, je vais mettre l'Europe et puis vous devez cliquer sur créer une application. Nous avons donc créé une obligation. Il y a quelques instructions que nous devons faire d'abord. Nous devons d'abord télécharger et installer Heroku CLI. Allons à ce lien et vérifions-le. Donc, dans ce lien, vous pouvez voir plusieurs options pour installer Heroku. Donc, par exemple, vous avez façon macOS, vous pouvez utiliser commentaire si vous avez Homebrew et aussi si vous avez Windows, vous pouvez installer un programme d'installation. Et aussi pour ouvrir TO de cette façon,
que j'aime toujours utiliser est en utilisant NPM, NPM global installé. Donc, vous pouvez faire npm installer dash global, Heroku. Allons donc à Paris et faisons ça. Alors j'irai ici et j'ouvrirai mon terminal. Je vais utiliser le bouton Contrôle J comme nous l'avons vu précédemment. Et puis je dirai npm installé moins g. Donc, de cette façon, j'installerai le périphérique Heroku Domain public, donc je peux utiliser les commandes Heroku dans ma machine. Mais le premier que je dois faire est peut-être qu'on a besoin d'une autorisation. Donc, les autorisations, peut-être qu'il ne vous permettra pas d'installer public ou globalement. Vous devez préfixer ce commentaire avec sudo. Donc, comme vous le voyez ici, je ne suis pas r. Je n'ai pas les autorisations pour le faire, donc j'ai besoin de préfixer cette commande avec sudo. Donc, nous pouvons dire sudo nmap, mais dans Windows, je pense que vous n'aurez aucun problème. Et puis il me demandera mon mot de passe. Et puis je vais mettre le mot de passe et il sera installé avec succès. Maintenant, comme vous le voyez, il a été installé, nous avons maintenant la commande Heroku. Ainsi, vous pouvez, par exemple, mettre Heroku comme ceci et vous obtiendrez une commande comme les options que vous avez, certaines options que vous pouvez utiliser pour vos commentaires Heroku. Retournez à notre navigateur. Après l'installation, nous retournons à notre application et nous devons faire une bonne édition. Et aussi, nous devons connecter notre projet Heroku ou notre projet back-end à Heroku git. Mais tout d'abord, la chose la plus importante parce que avant de faire cette étape, vous avez bien sûr, pour créer un fichier gitignore. Ainsi, par exemple, dans Heroku, je ne vais pas déployer ce fichier final. Ce fichier m contient ma chaîne de connexion à la base de données est mon secret et aussi l'URL de l'API. Je ne vais pas pousser cela au dépôt git Heroku. Donc, de cette façon, nous devons ajouter un fichier qui est appelé git ignore. Donc, quand j'utilise un bon commentaire de Heroku, alors il ne poussera pas les fichiers que je spécifie. Donc aussi, vous n'avez pas besoin de pousser les modules de noeud. Les modules monod viennent normalement un fichier très énorme, près de 200 mégaoctets, parce que nous installons des bibliothèques et leurs dépendances. Vous n'avez pas besoin d'utiliser également les modules Node. Donc, créer un fichier get ignoré, C'est très simple. Il vous suffit de créer un fichier à la racine du projet. Donc, vous devez dire git ignorer avant de faire n'importe quelle étape qui est mentionnée là. Donc, d'abord, vous devez ignorer le dossier des modules de noeud. Donc, nous disons des modules de soulignement de noeud barre oblique. Et aussi nous devons ignorer le fichier m et aussi d'autres fichiers de développement comme le plus joli RC, comme vous le voyez ici, nous avons ce fichier pour que nous puissions l'ignorer aussi. Donc, dans ce cas, nous avons, nous sommes, nous sommes prêts à connecter notre projet au dépôt Heroku. Donc, nous revenons aux instructions et nous devons dire d'y entrer. Parce que si nous n'avons pas initialisé notre projet précédemment car nous avons vu que nous n'avons pas un bon, Nous ne l'avons pas connecté à un bon. Donc, dans ce cas, nous devons dire obtenir tout, ok, Après que vous y arrivez, vous verrez qu'il y a un fichier créé dans ce dépôt qui va ou appelé comme point kid. Et si vous voulez le voir, vous pouvez aller ici dans le dossier backend et vous verrez que ce dossier et a été créé. Donc, la prochaine instruction, nous devons connecter Heroku git remote. Mais d'abord, nous devons utiliser Heroku login. Alors regardons d'abord Heroku. Donc, je vais utiliser Heroku login et puis il me demandera, voulez-vous ouvrir le navigateur et vous pouvez vous connecter alors. Donc, nous ne pouvons pas dire oui, nous pouvons appuyer sur n'importe quelle touche et puis il ouvrira automatiquement le navigateur. Donc, comme vous le voyez ici, j'ai une autre page. Il dit regarder dans Heroku CLI. Je dirai regarder et ensuite connecté parce que je suis déjà connecté sur le même navigateur. Ainsi, lorsque vous retournez au terminal, il saura que vous avez déjà connecté et vous pouvez utiliser les commandes Heroku, comme mentionné dans la documentation. Après cela, nous devons connecter notre Heroku ou notre projet au dépôt git Heroku. Donc, nous devons utiliser cette commande, toutes ces commandes, vous pouvez les utiliser comme vous le voyez, disons Heroku, git remote, puis ajouter E bits pointus et bleus. Donc, c'est exactement le même nom de l'application. Alors faisons ça. Et puis nous avons basé ce commentaire ici. Et puis, comme nous le verrons, d'accord, le dépôt Git est défini sur ce chemin. Alors maintenant, quand nous allons déployer notre projet ou télécharger notre code pour gérer cool, alors Heroku va obtenir ou lire tous leurs fichiers et le code que nous avons téléchargé à partir de ce chemin. Dans la prochaine conférence, nous allons voir comment nous pouvons créer aussi une base de données de production. Nous n'avons pas besoin d'utiliser la même base de données que nous voyons parce que peut-être cette base de données nous pouvons différencier entre le développement et la production. Comme nous le verrons dans la prochaine conférence.
62. Créer une base de production facultative: Ok, dans cette conférence, nous allons parler de la création d'une base de données de production. Donc, lorsque vous faites un développement ou lorsque vous faites une application, vous avez
normalement une base de données spatiale pour vous, juste
pour développer et tester des choses et faire un progrès pour votre application. Mais après avoir déployé le projet à live, vous devez créer une base de données de production. Dans ce cours, cela est facultatif pour que vous puissiez créer une base de données en direct, une base de données de production ou non. Donc, dans cette section ou dans cette conférence, nous allons le faire. Si vous vous souvenez, nous avons installé MongoDB Compass et cette application MongoDB Compass, nous pouvons être en mesure de créer des bases de données et aussi nous pouvons aussi importer et exporter des données. Donc, dans notre cours, nous utilisions cette base de données, qui s'appelle la base de données e-shop. Maintenant, nous allons en créer un nouveau. On peut l'appeler E forte aussi, base de données. Et ce serait une production large. Donc, nous pouvons avoir cela et nous pouvons créer la première collection, qui sera appelée, par exemple, catégories. Et puis nous faisons, créer pour la base de données, et la base de données est créée. Comme vous le voyez ici, mais nous n'avons qu'une seule table. Donc, si vous vous souvenez, j'ai joint pour vous au début du cours, certains fichiers, vous pouvez les utiliser comme données par défaut. C' est comme les données que nous insérons font la base de données. C' est comme semer. Donc, nous pouvons utiliser aussi l'ensemencement que aussi bien ici. Donc, je vais le faire rapidement. Alors, comment importer des données en utilisant une boussole ? Vous avez juste à aller ici, cliquez sur les catégories, par exemple, sur le nom de la collection. Et puis vous pouvez dire importer des données. Et puis vous accédez au dossier où je vous ai donné. Donc, je vous ai donné, par exemple, catégories ou des articles et d'autres tableaux. Donc, pour cela, vous pouvez utiliser pour ces catégories et vous devez spécifier ici que vous avez JSON. Et maintenant, nous faisons l'importation. Et cette importation s'est terminée. Et nous verrons que nos données sont situées ici. Nous ferons donc la même chose pour toutes les tables. Je vais le faire rapidement devant vous. J' ai donc créé ici une nouvelle table. Je l'appelle utilisateur, ou utilisateurs. Et ces utilisateurs, je vais importer ces données aussi. Nous devons donc faire la même chose pour toutes les autres tables. Donc maintenant ma production de base de données est pleine. Donc, nous allons utiliser cette base de données, mais nous sommes seulement pour leur application de produit ou que l'application développée sur le développement local Heroku, nous utilisons toujours la question de la base de données. Alors, comment nous pouvons faire cela dynamiquement, comme lorsque je déploie ISA à l'application utilise la base de données. Mais quand je développe, je veux dire à l'application, d'
accord, utilisez cette base de données. Donc, c'est assez simple. Nous allons configurer les variables d'environnement qui sont préférées pour Heroku parce que nous allons utiliser ces variables et nous les utilisons dans l'application. Et sur le développement, nous pouvons garder, par
exemple, cette chaîne de connexion. Mais sur la production, nous allons avoir une autre chaîne de connexion. Mais ici comme vous le voyez, ce fichier d'environnement n'est pas déployé parce que nous avons ajouté à git ignore. Donc, ce ne sera pas dans le déploiement sur Heroku parce qu'Heroku ne saura pas que nous avons un fichier d'environnement ici.
63. Régler les variables de développement et d'environnement des produits: Ok, maintenant comment nous pouvons dire à l'application d'utiliser cette base de données de production, pas la base de données de développement. Tout d'abord, si vous vous souvenez, nous avons ajouté le fichier m et dans le fichier final nous l'utilisions pour connexion à la base de données que nous avons créée dans MongoDB Atlas. Donc, la chaîne de connexion est stockée dans le fichier m comme vous le voyez ici, et nous en avons parlé précédemment. Donc maintenant, nous allons avoir une chaîne de connexion différente pour la production. Donc, dans ce cas, ok, nous utilisons cette chaîne de connexion ici dans les connexions de processus à faire. Mais comme je vous l'ai dit que lorsque nous allons déployer cette application, ce module m-file, plus joli, IC et Node, ils ne seront pas téléchargés sur le serveur. Donc, d'où l'application déployée saura quelle chaîne de connexion utiliser. Parce que dans ce cas, lorsque je déploie, il ne saura pas quelle chaîne de connexion utiliser car elle sera indéfinie ici. Et puis nous aurons une erreur de connexion. Donc, pour cela, changeons d'abord tout ce que nous avons, comme deux ou dans notre app.js, tout ce que nous devons changer pour être en production. Par exemple, ce nom, je vais utiliser une base de données mais à l'étranger, pas celle-ci. Nous devons donc changer cela aussi. Nous devons également utiliser une autre variable, que nous pouvons appeler le nom de dB, par exemple. Et nous pouvons donner ce nom DB dans le fichier. Donc, nous pouvons, après cela a été une ligne, nous pouvons dire nom DP. Et puis pour local, je devrai utiliser cette base de données e-shop. Mais dans la production, nous allons en utiliser un autre. Ok, quoi d'autre ? Donc, l'application utilise également un port spécifique. Donc, lorsque vous démarrez l'application en production, comme vous le voyez ici, lorsque nous allons au navigateur de notre application et nous utilisons, nous disons, par exemple, ouvrir l'application ici sur le dessus. Ensuite, nous aurons une nouvelle application. Comme vous le voyez ici, nous avons le lien, mais il ne contient aucun port ou comme par exemple, 3000 ou quelque chose comme quelque chose. Parce qu'avant nous avions comme hôte local comme ça et 3000. Donc nous n'avons pas le tableau ici. Alors, comment nous pouvons aussi rendre le conseil dynamique. Nous devons donc le faire aussi bien parce que dans la production, il utilisera un port différent. Donc aussi ici, nous devons définir une variable. On peut le donner comme une constante et on dit port. Et ce port proviendra également de variables d'environnement. Et il s'appellera le port. S' il n'y a pas de port, utilisez 3000. Donc juste au cas où cette partie ne vient pas ou qu'elle est livrée avec indéfinie. Alors on utilise ce tableau ici. Et dans mon fichier, je peux définir ce port. Donc, nous pouvons dire aussi bien ici, utiliser le port, nous pouvons dire que le port sera 3000. Mais rappelez-vous, ce n'est que pour le développement local. Nous n'avons pas pour ça pour la production. La production le remplacera par un autre port. Mais le mot clé pour cela, il sera acheté comme ça. Donc Heroku va trouver ou créer un port seul. Normalement, c'est le port 80, qui est le port par défaut du HTTP. Ok, maintenant nous avons un problème. Alors, comment la production sans variable de chaîne de connexion. Alors, comment nous pouvons créer ça. Donc, nous allons à nouveau au navigateur où nous avons créé notre application. Et puis nous trouverons sur le dessus quelque chose appelé activité ou paramètres. Et dans leurs paramètres, vous trouverez un vars de configuration révélée. Ce sont donc les vars de conflit qui seront utilisés dans la production. Donc, dans ce cas, je dois dire à mon application ici, utilisez la chaîne de connexion, mais nous sommes en production une. Donc, je vais revenir au navigateur, puis créer une nouvelle chaîne de connexion de clé sera ce qu'il sera. La connexion reste la même mais avec une base de données différente. Donc, je vais utiliser le même. Et puis je dirai que pas utiliser la base de données e-shop, mais chacun de cela obéit à l'étranger. Et aussi, nous avons aussi besoin de créer une autre chose qui s'appelle le nom DP. Nous allons utiliser ce nom pointu, que la base, donc ici aussi, E-Sharp, qui obéit aussi large. Donc, dans ce cas, l'application saura qu'il y a une chaîne de connexion et il la lirait à partir d'ici. Donc on n'a pas à s'inquiéter pour ça. Il est donc préférable d'ajouter toutes les variables d'environnement à la connexion car sinon notre application échouera. Ce que nous devons utiliser ici, API URL, qui sera la même chose que nous avions là-bas. Ce sera api slash v1 et nous l'ajoutons secret. La même chose. Il devrait également être les mêmes lettres majuscules ou minuscules parce que c'est sensible à la casse. Et nous aurons ici le secret ou vous pouvez utiliser un autre secret. Donc, lorsque je déploie mon application, alors il va rechercher le processus. Mais notre erreur locale n'est pas déployée parce que nous l'avons dans le bon ignorer. Donc, il ne sera pas sur le serveur afin qu'Heroku ne sache pas du travail pour l'obtenir. Il va aller dans les vars du conflit et ensuite lire ces valeurs. Donc, dans ce cas, nous avons une base de données différente de la production et une base de données pour le développement local. Dans la prochaine conférence, nous allons voir comment nous pouvons l'utiliser et comment nous pouvons déployer l'application sur le serveur.
64. Déployer l'application et tester: Revenons maintenant à l'instruction de déploiement de l'application. Donc ici, si nous allons à nouveau à l'application et nous cliquons sur Déployer, et nous verrons à nouveau notre instruction. Nous avons donc déjà fait cette connexion et nous avons déployé ou fait le lien entre l'application et le dépôt Git de Heroku. Maintenant, nous allons exécuter ces commentaires. Tout d'abord, nous devons ajouter le code au bien, donc nous devons le valider. Donc, si vous ne savez pas ce que c'est, C'est comme si vous donniez des informations sur, comme quel code vous engagez dans votre dépôt. Donc quand je change,
je dis, d'accord, j'ai changé celui-là, je l'enlève. Donc, je dirais dans le message de validation que la suppression du gestionnaire d'erreur. Ainsi, vous gardez une trace de vos changements sur le projet. Donc ici, nous pouvons le faire aussi avec Heroku. Donc, nous devons faire git add dot et ensuite git commit dash am, rendre meilleur ou n'importe quel message. Alors tout d'abord, faisons le bien. Cela signifie que nous ajoutons tous les fichiers du projet
au dépôt Git pour les préparer pour le téléchargement sur le serveur. Et puis après cela, nous devons faire le commit git, puis tiret m. Et puis vous pouvez spécifier un message. Donc, par exemple, déployer d'abord, mourir. Donc, nous pouvons aussi bien ajouter ce message de validation. Après cela, nous devons pousser le code au cetera. Nous sommes comment nous le faisons avec cette commande, git, push, heroku, maître. Donc, je vais aller au terminal et puis coller cette commande ici. Et puis il va télécharger toutes les informations ou tout le code que j'ai spécifié, sauf les fichiers ou les fichiers et dossiers que j'ai spécifiés dans git ignorer. Donc, dans ce cas, nous aurons tous nos dossiers de développement sont là. Donc, comme vous le voyez ici, c'est fléchette, ne déployer l'application, les fichiers finis, ça, commencer à le construire. Et maintenant, il montre toute la progression de l'installation des bibliothèques. Il fait également npm installer pour l'installation les paquets que nous avons utilisés pour notre application. Et puis il aura des modules Node, mais sur le serveur, pas celui-ci. Donc, après cela, il va compresser l'application pour une utilisation plus rapide. Et vous devez également vous rappeler de télécharger les images qui sont dans le dossier de téléchargement afin que nous puissions voir les images ainsi dans le, dans le serveur. Donc sinon, si vous n'avez pas ces images que j'ai attachées comme pour vous aussi, parce qu'elles sont aussi dans la base de données, les liens vers ces messages ou images. Vous devez également les télécharger sur votre serveur. Alors que le déploiement est terminé, vérification du déploiement, fait. Ok, Revenons au navigateur et allons à l'application et actualisons ici. Joli. Nous avons un message, l'utilisateur n'est pas autorisé. C' est génial parce que si vous vous souvenez, nous avons autorisé notre API. Donc, si vous vous souvenez dans les routes ou dans les aides, nous avons dit JWT que nous allons exclure certaines routes de l'authentification, par exemple,
pour obtenir un produit ou obtenir une catégorie. Alors essayons d'obtenir un produit dans le navigateur. Donc, je vais dire ici exactement si vous vous souvenez comment nous faisions avec hôte
local et 3000, puis j'ai mis API v1, et puis j'ai mis des produits par exemple. Donc c'est comme une demande get quand vous l'essayez,
Ok, Nous avons toutes les données de notre base de données. Vous ne pouvez pas essayer ça aussi bien que Postman, si vous vous souvenez, nous avons beaucoup travaillé avec le facteur et nous avons essayé notre API dans Postman. Donc ici, je vais ouvrir un nouvel onglet pour une nouvelle requête
GET, puis je vais mettre ce lien. Donc, le lien de mon API d'application, v1 produit. Donc, ce sera exactement comment je le fais comme de l'hôte local. Vous voyez donc que toutes ces informations sont stockées et que nous utilisons la base de données de production. Nous n'utilisons pas la base de données que nous avions pour local. Donc, pour le prouver, faisons un changement dans la base de données en utilisant boussole. Donc, je vais aller à mon application, je vais passer à la base de données de production. Je vais cliquer dessus et j'ouvrirai les produits. Et j'irai à celui où ça commence, je me souviens en tant que mol, quelque chose comme ça. Donc voici le petit, vous voyez ici le petit et c'est. Alors, changeons ça. On peut dire de changer cette phrase. Nous allons à la, donc nous cliquons sur le petit ici et nous pouvons dire, par exemple, à l'étranger. Donc on peut agrandir ça et dire la production. Donc, nous pouvons ajouter ce mot production ici. Donc, après nous mettons à jour, puis nous allons à Postman, et puis nous cliquons sur Envoyer. Ok, nous avons ici la production. Donc, c'est la preuve que j'utilise la base de données large, mais sur mon hôte local, Essayons d'exécuter l'application sur local. Donc, nous pouvons dire npm commencer comme nous exécutions l'application localement, ok, Le localhost 3000, tout va bien. Maintenant, nous allons à la requête GET, mais sur l'hôte local. Nous avons donc ici, par exemple, produits API
localhost 3000. Et puis si nous l'appelons, nous verrons que nous appelons la base de données, qui est dans l'hôte local. Et si on vérifie cette base de données, j'irai ici. Et je vais vérifier ce problème de base de données. Accédez aux produits. J' aurai beaucoup de produits fictifs que nous utilisions pendant le développement. Donc, dans ce cas, nous différencions chaque fois que j'ai déployé à mon truc de pouce d'application, pouvez-vous alors il va utiliser une base de données de leur production. Par exemple, je vais changer quelque chose ici. Je vais ajouter un journal de console. Quel exemple de journal de console. Comme utiliser, nous utilisons. Par exemple, vous pouvez mettre supplémentaire et ensuite vous pouvez utiliser le nom de base de données ici. Donc, quand j'économise, ok, sur mon local, je dirai que nous utilisons la base de données e-shop, mais nous devons le déployer. Donc, ici, notre hôte local, nous avons une base de données e-shop, comme nous le savons pour le développement. Mais si nous déployons cela, nous obtiendrions, nous utilisons la question de la base de données apporté thé ou produit. Donc, de cette façon, comment nous pouvons pousser les changements, encore une fois, nous devons mettre git add et ensuite nous ajoutons un message. Donc, par exemple, les commentaires, nous pouvons dire changement, puis nous appuyons sur Entrée, puis nous utilisons à nouveau pousser commun. Donc git, pousser heroku maître, il sera à nouveau déployé. Donc, comme vous le voyez ici, il se déploie à nouveau. Le même processus que nous avons vu dans la première étape. Maintenant, le déploiement est terminé. Comment nous pouvons voir que, par
exemple, ce message que nous utilisons, comme la base de données, vous, je veux dire comment nous pouvons voir le journal de la console ou les erreurs que nous voyons dans le développement. Pour voir que vous pouvez aller facile Deux plus ici, et vous pouvez vérifier ici une vue journaux. Donc, lorsque vous cliquez dessus, vous verrez tous les journaux comme vous êtes en train de développer localement. Donc nous disons ici, nous utilisons la base de données e-shop à l'étranger. Donc, cette très grande chose et exactement comment nous avons eu l'application sur local et aussi, cela fera comme surveillance pour notre API. Donc, quand j'appelle cette API, alors je vais aux journaux. Je vais voir que, ok, nous avons des informations Get API v1 produits et d'
autres informations sur la demande et le retour et combien de temps cela a pris. Mais si nous allons à la base de données, nous devons, par exemple, vérifier une image. Donc, je vais ici et je vais aller à la base de données et j'ai des produits. Nous aurons un problème avec les images. Donc, si vous vous souvenez, nous avons téléchargé quelques images avec notre e-Sharp. Donc, quand je vais ici, je verrai que dans le produit, ils ont encore ce localhost 3000. Malheureusement, cela n'est pas possible de le remplacer. Vous devez donc remplacer toutes ces chaînes qui sont liées à l'hôte local. Vous devez les remplacer chaque année par le lien fourni pour votre demande. Donc, dans ce cas, je vais ici à ma demande et puis copier cette partie qui est d'ici à .com. Donc je vais copier tout ça. Et puis j'irai à nouveau sur ce campus. Et qu'il joue de HTTP à localhost. Aussi le port n'est pas nécessaire et je vais ajouter la mise à jour ou mettre à jour cette partie ici. Donc, nous cliquons sur Mise à jour et puis il sera mis à jour. Donc, quand je vais maintenant à l'application et coller l'URL de l'image, alors je serai en mesure de voir l'image avec succès. Sinon, toutes les images, malheureusement, ils sont toujours sur localhost 3000. Jusqu' à présent, en fonction de votre nom de votre application, vous devrez remplacer tout cela pour la base de données. Bien sûr, après avoir utilisé cette base , par
exemple, dans une partie frontale ou quand nous allons utiliser Postman par exemple, lorsque je vais poster un produit en utilisant cette URL API, il va télécharger l'image basée sur cette URL, donc il sera stocké dans la base de données comme ça. Mais parce que nous utilisions cette base de données en développement, vous devez le faire manuellement. Parce que aussi, nous utilisions lorsque nous publions un produit. Si vous vous souvenez, si nous allons poster le produit et dans le produit post, nous faisions comme l'image en utilisant l'hôte. Je reçois l'hôte actuel, puis je mets le reste ici pour stocker le chemin d'image. Ainsi, l'hôte sera pris à partir de l'hôte que vous utilisez et à partir duquel vous appelez l'API. Donc, dans ce cas, vous n'avez pas à vous soucier des liens que nous voulons télécharger pour les fichiers téléchargés. Donc, maintenant, nous avons une API entièrement fonctionnelle sur le serveur. L' application a été déployée. Bien sûr, si vous voulez supprimer ce Heroku.com et créer votre propre domaine, ce n'est pas gratuit. Tu dois payer pour ça. Et bien sûr, vous pouvez être en mesure de l'avoir sous votre propre domaine. Donc, dans l'application frontale ou toute application frontale, lorsque vous allez déployer l'application frontale, pas leur API Web. Vous pouvez dire que pour mon application dans le front end en production, utilisez cette URL API pour tous comme l'application. Et puis, lorsque votre application est déployée, elle se connecte à cette API et récupère les données à partir de là.