NodeJs: a aprendizagem prática completa [2024] | Alex Bakker | Skillshare
Pesquisar

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

NodeJs: a aprendizagem prática completa [2024]

teacher avatar Alex Bakker, Web, A.I. and Mobile Development

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução

      2:16

    • 2.

      Visão geral da nossa API RESTful

      3:26

    • 3.

      Como instalar nodejs

      1:55

    • 4.

      Como instalar o carteiro

      1:50

    • 5.

      Configurar o Atlas MongoDB

      1:57

    • 6.

      Como preparar o servidor de API

      2:44

    • 7.

      Como criar o servidor de backend com o Express

      6:38

    • 8.

      Variáveis de ambiente de leitura

      4:59

    • 9.

      Crie a primeira chamada de API e dados de análise do Json

      6:47

    • 10.

      Solicitações de API de registro

      2:38

    • 11.

      Como instalar Mongoose e conectar ao banco de dados MondoDB

      10:02

    • 12.

      Como usar o Atlas MongoDB

      3:19

    • 13.

      Leia a gravação de dados em banco de dados usando a API

      14:31

    • 14.

      Analisando o banco de dados da E Shop

      5:40

    • 15.

      Crie rotas e esquemas de API de backend

      9:48

    • 16.

      Como ativar o CORS e por que precisamos dele

      3:15

    • 17.

      Produtos e Categoris

      2:44

    • 18.

      Esquema de modelos de produtos

      6:12

    • 19.

      Categorias Modelo e esquema

      1:13

    • 20.

      Adicionar e excluir categorias

      12:39

    • 21.

      Obtenha categorias e detalhes da categoria

      2:48

    • 22.

      Atualizar categoria

      4:09

    • 23.

      Publique uma nova API REST de produto

      5:55

    • 24.

      Obtenha um produto e lista de produtos API REST

      3:47

    • 25.

      Mostrar detalhes da categoria no Popular de produtos

      3:01

    • 26.

      Atualizar uma API REST de produto

      3:17

    • 27.

      Excluir uma API REST de produto

      3:45

    • 28.

      Obtenha a contagem de produtos para fins estatísticos

      3:43

    • 29.

      Obtenha produtos em destaque

      5:18

    • 30.

      Filtragem e obtenção de produtos por categoria

      6:54

    • 31.

      Como mudar a tecla "_id" para "id": mais amigável ao frontend

      2:05

    • 32.

      Apresentação

      2:22

    • 33.

      Modelo e esquema de usuários

      2:01

    • 34.

      Registre uma nova API REST de usuário

      5:18

    • 35.

      Hashing da palavra de entrada do usuário

      2:57

    • 36.

      Obtenha usuário e lista de usuários excluindo a Password

      2:56

    • 37.

      Entre em uma API REST de usuário e criando um token

      11:25

    • 38.

      Como proteger a API e a autenticação de middleware JWT

      6:07

    • 39.

      Manipulação de erros de autenticação

      5:07

    • 40.

      Como excluir rotas de API REST da autenticação

      6:48

    • 41.

      Adicione mais informações secretas do usuário ao Token

      2:38

    • 42.

      Usuários e administradores

      6:46

    • 43.

      Obtenha a API REST de contagem de usuários

      2:16

    • 44.

      Ordens

      1:53

    • 45.

      Ordens e modelos de itens de ordem

      5:00

    • 46.

      Exemplo de ordem de link para encomendar itens para produtos

      1:12

    • 47.

      Nova ordem e criar itens de ordem ao postar nova ordem

      11:42

    • 48.

      Obtenha detalhes de pedidos e preencha produtos em itens de pedidos e dados do usuário

      8:10

    • 49.

      Atualizar a API REST do status da ordem

      4:29

    • 50.

      Como avaliar o preço total de um pedido com Mongoose

      7:01

    • 51.

      Obtenha vendas totais da Loja Eletrônica usando $sum

      6:42

    • 52.

      Obtenha ordens de usuários

      3:25

    • 53.

      Imagem do produto e upload da galeria

      2:22

    • 54.

      Configurar o upload do lado do servidor

      11:24

    • 55.

      Testando o upload de imagens com Postman

      4:55

    • 56.

      Como validar tipos de arquivos enviados

      6:16

    • 57.

      Upload de imagem com solicitação de publicação de produtos

      1:10

    • 58.

      Upload de imagem com solicitação de produto PUT

      3:19

    • 59.

      Galeria de produtos Várias imagens

      7:17

    • 60.

      Como excluir a pasta de uploads da autenticação

      2:57

    • 61.

      Como instalar o Heroku e preparar o Git

      8:24

    • 62.

      Opcional como criar banco de dados de produção

      3:59

    • 63.

      Como definir variáveis de desenvolvimento e ambiente de produtos

      6:17

    • 64.

      Implante o aplicativo e teste-o

      12:02

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

244

Estudantes

--

Projetos

Sobre este curso

O que é Node.js?

Node.js ou Node, é um ambiente runtime para a implementação de código JavaScript fora de um navegador. É ideal para construir serviços de backend (APIs) altamente escaláveis e com grande intensidade de dados que potencializam os aplicativos do seu cliente (aplicativos web ou móveis).

Por que aprender Node?

O Node é ótimo para prototipagem e desenvolvimento ágil, bem como para construir aplicativos super rápidos e altamente escaláveis; Empresas como Uber e PayPal usam o Node em produção para construir aplicativos porque requer menos pessoas e menos código. Além disso, o Node tem o maior ecossistema de biblioteca de código aberto, para que você não precise construir tudo do zero.

Você aprende neste curso como usar o mongoDb sem instalar ferramentas extras, o MongoDB agora está na nuvem, então você vai armazenar seu banco de dados em lugar seguro!

Este não é um curso de documentação de leitura. Você tem aqui um projeto real para aprender e vai ver o lugar exato de cada característica de cada tecnologia usada neste curso.

O que você vai ter ao se inscrever neste curso:

  • 5 horas de vídeos em HD, completos com exercícios e soluções

  • Um projeto do mundo real: você vai construir o back-end para uma loja virtual, não um aplicativo de tarefas idiota!

  • Não há mais tempo perdido em cursos longos ou tutoriais desatualizados

  • Informações e soluções atualizadas e práticas (sem problemas!)

  • A oportunidade de aprender no seu próprio ritmo: acesso vitalício, então leve seu tempo se preferir

  • Dicas de especialistas para se tornar uma estrela do Node

  • As melhores práticas e armadilhas comuns a serem evitadas

  • Assista em qualquer dispositivo

  • Certificado de conclusão para apresentar ao seu empregador

 

Você aprenderá:

  • Construa serviços RESTful com confiança (APIs) usando Node.js, Express.js e MongoDB Atlas

  • Empregar as melhores práticas para Node.js

  • Evite erros comuns

 

O que vamos abordar:

  • Sistema de módulo de nó

  • Gerente de pacotes de nó (NPM)

  • JavaScript assíncrono

  • Funcionalidades úteis do ES6+

  • Como implementar operações CRUD

  • Como armazenar dados complexos no MongoDB

  • Validação de dados

  • Autenticação e autorização

  • Papéis de usuário

  • Como lidar e registrar erros da maneira certa

  • Em breve: implantação

Nota:

Este curso está incluindo a construção da API de backend e todas as operações no banco de dados, não estamos fazendo frontend aqui

Confira meus outros cursos para conectar esta API e construir o front-end do E-Shop com tecnologias de frontend

Este curso é para você se:

Você é um desenvolvedor de back-end e deseja adicionar nova tecnologia à sua pilha.

Você é um desenvolvedor front-end e deseja fazer a transição para o desenvolvimento completo.

Você tentou outros tutoriais do Node.js e achou que eles eram muito lentos, desatualizados e chatos!

Ter o Node.js em seu CV ajuda você a encontrar mais empregos e ganhar mais dinheiro.

E não apenas isso, você terá tarefas opcionais para fazer e podemos revisá-las para você! Basta pegar uma tarefa do quadro e criar a solicitação de pull para obter a avaliação, para ser como em uma experiência do mundo real!

Conheça seu professor

Teacher Profile Image

Alex Bakker

Web, A.I. and Mobile Development

Professor
Level: All Levels

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Introdução: Bem-vindo ao curso API web NodeJS. Neste curso, você vai aprender fazendo. Vamos colocar na frente de você a experiência mais prática que você precisa para criar APIs web. Porque hoje em dia, se você quer ganhar uma experiência, você tem que fazê-lo não só ler uma documentação ou seguir algum curso teórico. É por isso que construímos este curso, que será a API Web e-sharp. Vamos cobrir todas as informações necessárias para criar uma API de loja virtual. Api significa interface de programação de aplicativos, ou em outras palavras, a interface que trará para mim que, uh, do banco de dados para a interface do usuário. E ele estará localizado em um servidor web onde nosso aplicativo NodeJS será hospedado. Cada API é segura. Então, vamos aprender neste curso como autenticar essas APIs e protegê-las. Criaremos todas as APIs que são necessárias para o e-shop, como o produto e categorias e usuários e usuários logins e autenticação e registro de usuário. E, claro, as ordens que os usuários farão, não esqueceremos também o upload de arquivos e os múltiplos uploads de arquivos. Porque precisaremos disso para nossas imagens de produtos e galeria de produtos, usaremos a melhor ferramenta para criar nossa API. E como um desenvolvedor de back-end, você verá como testar suas APIs porque algumas ferramentas podem nos fornecer funcionalidade completa sem depender do front-end e esperar que ele seja feito. Usaremos também os editores certos e as melhores extensões para acelerar a nossa produtividade. E não só isso, você verá também como este curso é interativo. Então, vamos pedir-lhe para resolver uma tarefa e vamos analisá-las para você. Espero que você aproveite este curso e estou ansioso para trabalhar todos nós juntos para construir a melhor API para um e-shop. 2. Visão geral à nossa API RESTful: Vamos dar uma olhada na nossa API RESTful para ver como trocar dados entre o cliente e o servidor. Qual é a arquitetura da API RESTful? Temos o cliente e temos um servidor, e eles estão trocando dados através do protocolo HTTP. Este é o conceito básico da API RESTful. Há também operações de inclusão para criar dados, ler dados, atualizar dados e excluí-los. Suas operações podem ser feitas através do protocolo HTTP. Existem métodos específicos de protocolo HTTP que fazendo essas operações, que estamos chamando operações em primeiro lugar, qual é a diferença entre RESTful API e a rota front-end? A API RESTful está trazendo dados. A seca front-end está mostrando os dados ou renderizando uma página específica. Quando você abre o seu navegador e colocar link RESTful API, se você tiver acesso para obter esses dados, então você terá uma string que consiste em JSON ou arquivo XML. O protocolo Http é capaz de renderizar uma página com HTML CSS e trazer seus dados. Então métodos HTTP em geral, eles são GET, post, PUT, e delete, que são as operações brutas. Mas em métodos HTTP, eles são chamados assim. Então eu estou enviando uma solicitação para o banco de dados ou para o back-end em geral para obter através de descanso API alguns dados. Por exemplo, obter uma lista de produtos através da API, ele vai me dar matriz de lista de produtos. Obtendo um único produto, ignorando o ID deste produto, ele vai me dar arquivo JSON com todos os detalhes do produto. Quando eu quero atualizar um produto, eu envio uma solicitação PUT com a ideia do produto e também anexando os novos dados. E a resposta será o mesmo produto, mas com dados diferentes. E excluir um produto é apenas passar o ID do produto com solicitação de exclusão. Criando um produto, precisa postar um novo produto. Então eu estou usando a rota principal da API dos produtos e então eu estou passando quaisquer novos dados, os dados que, por exemplo, nome do seu produto e a imagem, e que é lagoas, serão um novo ID com o novo nome do produto e, claro, a imagem. Essas são as nossas solicitações de API para obter os dados ou postar, excluir ou atualizar dados no servidor. E eu estou usando api barra v1, que significa a versão um. Então, quando você quiser atualizar sua API no futuro, você adiciona uma nova versão. Portanto, os usuários ainda podem usar as versões mais antigas da sua API. A mesma coisa para os pedidos e os usuários. Então, neste caso, você tem todas a mesma sequência, mas você só precisa planejar seus dados, certo? Criar um servidor web com NodeJS é muito simples. Vamos ver isso na próxima palestra. 3. Instalando os nodejs: Para iniciar o desenvolvimento, sempre precisamos do gerenciamento de pacotes. O gerenciamento de pacotes vem com aplicativo NodeJS. Então, para instalá-lo apenas joga no Google NodeJS e vá para Download. E você verá o download para todos os sistemas operacionais. Por exemplo, eu tenho aqui para Windows e também eu tenho para Mac OS. Existem dois tipos como LTS, que é recomendado para a maioria dos usuários, e o atual, que é os recursos mais recentes. Melhor obter sempre uma versão estável, que é recomendado para a maioria dos usuários. Aqui, você pode escolher sua instalação com base no seu sistema operacional. E será simplesmente um aplicativo, como qualquer aplicativo que você possa instalar. Então, depois disso, você pode baixar este aplicativo e executá-lo. E será como qualquer instalação normal de aplicativo. Então, para ter certeza, depois disso, você termina todas essas etapas. Você precisa executar alguns comentários MPM. Então, para executar comandos mpm, podemos usar Visual Studio Code. Depois de abrir o código do Visual Studio, você verá aqui os projetos mais recentes que você tem. Mas, por exemplo, precisamos abrir o terminal do código do Visual Studio. Então eu vou aqui dizer Controle e J. e então eu vou ter o terminal aberto. E no terminal, podemos, por exemplo, colocar um comentário NodeJS. Então podemos dizer, por exemplo, versão NPM. E nós obteríamos o detalhe completo virgem sobre o Node.js instalado. Depois disso, poderemos usar o gerenciamento de pacotes NodeJS, onde existem muitas bibliotecas que podemos usar em nossos aplicativos e desenvolvimentos. 4. Instalando o poste: Quando estamos criando APIs, precisamos testá-las. Você pode testar suas APIs com um aplicativo de front-end como React ou Angular ou Vue js. Mas nós estamos indo neste curso para começar com o backend primeiro. Então, a melhor maneira de fazer isso e testar as APIs é instalar uma ferramenta chamada Postman. Vamos ao Google. Você vai para o download Carteiro. E aqui você encontrará com base no seu sistema operacional. Então, aqui você escolherá baixar o aplicativo. E depois que ele é baixado, ele será uma configuração normal como qualquer aplicativo. Depois de abrir o arquivo baixado, você receberá uma notificação se estiver usando o Mac OS. E ele vai pedir que você mova este aplicativo para a pasta do aplicativo. E depois disso, você verá que este aplicativo está localizado na pasta do aplicativo. A mesma coisa para o Windows. É normal instalar como qualquer aplicativo pequeno. Depois de abrir o aplicativo, você poderá testar APIs. Vamos testar um. Quando você vai para o Google e digite espaço reservado JSON, você verá o primeiro link é algumas APIs falsas. Assim, você pode testar um solicitações GET ou postar solicitações. Então vamos tentar este. Diz aqui. Como um pedido GET, eu vou para o Postman e, em seguida, eu abrir uma nova guia com o pedido GET e colocar o link que eu copiei do espaço reservado JSON e pressione Enviar, eu vou obter uma resposta. Esta resposta vem como um JSON. E da mesma forma, vamos construir nossas APIs. 5. Configurando o Atlas MongoDB: Para o nosso e-shop, precisamos de um banco de dados. E o banco de dados, não precisamos instalar nenhum software. Usaremos MongoDB, Atlas. Mongodb oferece agora um armazenamento de banco de dados on-line, que significa que o banco de dados já está na Nuvem. O que precisamos fazer apenas para ir para o URL que eu anexei com esta palestra e criar uma conta aqui e se inscrever e, em seguida, olhar para a sua conta. Após o registro, você verá esta tela que você precisa para criar um projeto. Então, antes de tudo, você precisa criar um projeto para a nossa loja virtual. Então você vai aqui e diz, eu quero um projeto que é, por exemplo, cada hub. E eu clico em Avançar. E, em seguida, criar o projeto. Depois disso, o projeto requer um cluster. Então precisamos construir um cluster onde oferecemos nosso banco de dados. Então aqui, há clusters compartilhados, que é de graça. Você pode usá-lo e escolher o servidor mais próximo do seu país. Por exemplo, vou usar este, o padrão. E depois de criar o cluster, estamos prontos para criar nosso banco de dados. O banco de dados no MongoDB chamado coleção. Então você precisa ir para as coleções e criar uma nova com base em sua necessidade. Já temos um que criamos para o curso no projeto 0. Aqui há coleções em que eu criei vários bancos de dados. Então sua parte é apenas criar uma conta e criar cluster e criar sua própria coleção, que usaremos no curso. Veremos mais tarde como fazer a conexão entre nosso código back-end e o MongoDB na Nuvem. 6. Como preparar o servidor de API: Agora as coisas começam a ser difíceis. Não, não estou apenas dando. Neste módulo, veremos como trabalhar com o próprio produto e suas categorias, é claro, na parte back-end. Então, os principais passos para criar o nosso produto agora, para importar todos os dados do produto para o front-end. O que significa que queremos criar uma API para recuperar todos os dados do produto para o nosso front-end. Então nós precisávamos de alguma forma como um JSON, isso também inclui criar o produto e atualizá-lo e excluí-lo. Então, vamos primeiro criar os esquemas de produtos e categorias no banco de dados no nível do aplicativo. Além disso, começaremos o mais simples possível. Então categorias é a coisa mais fácil que podemos fazer agora. Então vamos fazer o resto API para categorias. E continuaremos a postar um novo produto no banco de dados através da API restante. E então vamos obter a lista dos produtos. E depois disso, obteremos um detalhe do produto por ID. E então veremos como conectar os produtos com a categoria. Por exemplo, quando estou recebendo um produto, vou ver como obter os detalhes da categoria dentro do produto. Depois disso, precisamos atualizar nosso produto. Então, às vezes precisamos atualizar o preço, ou queremos atualizar sua imagem, ou queremos atualizar o nome do produto. Excluindo um produto. Às vezes, quando não tenho o produto, apaguei-o da minha loja. E então queremos fazer algumas estatísticas como obter contagens de produtos, quantos produtos eu tenho na minha loja. Por exemplo, eu quero ver apenas os produtos em destaque. Porque se você se lembra, nós temos é bandeira destaque. Nós você sabe, quais produtos são apresentados para que possamos levá-los e exibi-los apenas na página inicial. E então é muito importante que tenhamos uma filtragem. Então precisamos filtrar seus produtos com base em categorias. Então eu não vou apenas por exemplo, algo para a saúde. Então eu recebo os produtos que estão lá categorias é saúde. É isso por enquanto. Espero que gostem deste módulo. Será um pouco detalhado, mas depois disso, você poderá criar os pedidos e os usuários, como vemos nos próximos módulos. 7. Como criar o servidor de Backend com o Express: Vamos começar a criar nosso servidor back-end, ou digamos nosso servidor web, onde vamos chamar nossas APIs para o cliente. Depois de ter aberto nosso Visual Studio Code para a pasta back-end pasta, como estruturamos antes, executamos um comando npm init no MPM nele, ele vai nos pedir um nome de pacote. Eu coloquei e-shop, uma virgem. Eu pressiono Enter description, digamos que algum back-end para o e-shop, por exemplo. E, em seguida, o ponto de entrada como onde o aplicativo vai começar, eu coloquei app.js e, em seguida, alguns, outro comentário. Continuamos pressionando Enter e então ele vai nos perguntar que está tudo bem. Pressionamos Enter. Então vamos ver um pacote Jason é criado. Então vamos criar agora o nosso arquivo até js, onde vamos começar o nosso ponto de entrada da nossa aplicação. Então eu vou colocar aqui, por exemplo, console.log, Olá Mundo. E, em seguida, ele vai imprimir Olá Mundo quando eu estiver executando este aplicativo. Mas como vamos executar este aplicativo, eu aconselho a usar uma biblioteca chamada NADH Monde, que é um utilitário que irá monitorar quaisquer alterações de nosso código-fonte quando pressionamos Control S ou salvar este aplicativo JS, ele vai reinicie o aplicativo novamente automaticamente. Então, depois de instalar esta biblioteca, vemos que está em independência em um pacote JSON como um script personalizado, podemos adicioná-lo aqui, como se fosse um comentário para iniciar o aplicativo usando Node monitor. Então eu posso dizer iniciar monitor nó ou nó gemer. Aplicativo ponto JS. Neste caso, terei o aplicativo iniciado com o arquivo de ponto de entrada app.js. Vamos tentar agora. Vamos salvar ab.js e, em seguida, escrever npm start. E depois que eu comecei o aplicativo, eu vou ver Hello World. E o aplicativo ainda está em execução. Então ele está detectando qualquer alteração que eu faço no aplicativo. Então eu digo “Helloworld “com a mudança foi ponto de exclamação, e vejo que mudou. Vamos mudar o mundo E-Sharp. Vamos ver Olá e-shop. Isso é ótimo. Então, até agora temos apenas um aplicativo em execução, mas ainda não temos nenhum servidor. Então, para criar um servidor web, vamos instalar o Express, que é uma biblioteca famosa de Node.JS para hospedar um servidor. Então, depois de fazer esta instalação, eu vou vê-lo também em dependências. Mas vamos remover este log console e criar uma constante, chamá-lo express e chamar a biblioteca express usando a palavra-chave require express. Ele irá chamá-lo automaticamente a partir de módulos de nó. E vamos criar uma constante que é chamado aplicativo. E este aplicativo com chamada de uma função chamada Express, que mencionamos ou definimos antes. Este servidor Web requer escuta de uma porta específica. Então eu digo que escutem. E eu especifico, por exemplo, 3 mil como um porto. E há um retorno de chamada. Callback nos dará, todos nós serão executados quando houver uma criação bem-sucedida do servidor. Então, no retorno de chamada, posso imprimir qualquer mensagem no console. Por exemplo, eu vou dizer que o servidor é iniciado agora ou o servidor está sendo executado agora no host local de link com porta 3000. Então, agora vamos executar o aplicativo novamente. Eu vou dizer npm começar. E vamos ter algum erro porque eu já estou executando o servidor. Então vamos começar e eu executo de novo. Vou ver o host local ou o servidor está sendo executado no localhost 3000. Quando eu abrir o navegador e visitar este URL, localhost 3000, vamos ver o que teremos. Eu coloquei aqui e eu vejo que vêm para cima, obter, não pode obter porque eu não especifiquei nenhuma rota inicial para o aplicativo. Nós criamos. Agora a rota inicial ou a raiz, podemos dizer app ponto get. Vamos ver Express está nos fornecendo todas as solicitações HTTP. Por exemplo, PUT, delete e também postar. Então esqueça. Ele aceitará dois parâmetros. A primeira é a rota em si. Por exemplo, direi a rota inicial ou a raiz. Então, neste caso, vou pedir um retorno de chamada. O retorno de chamada terá a resposta que enviarei ao cliente quando ele chamar esta rota. Então eu digo na resposta de retorno, ponto areia, por exemplo, digamos que uma mensagem, podemos chamá-la de olá ou API, não Hello World. Então agora temos esta API. Vamos salvar, e agora podemos executar o aplicativo novamente no navegador. O aplicativo chamará um GetMethod e teremos como resposta, esta API Olá. Então, como recapitulação, vimos como criamos nosso próprio servidor ou servidor web com express. E estávamos assistindo nossas mudanças com o nó Monitor e como chamamos esse aplicativo começar a inicializar uma rota. E executamos o servidor sob uma porta específica que vimos antes. Precisamos ter uma API e uma versão na URL do que fora. Então vamos ver como podemos criar isso com variáveis de ambiente na próxima palestra. 8. Variáveis de ambiente de leitura: Ok, então vamos começar com variáveis de ambiente. As variáveis de ambiente normalmente são usadas como uma variável pública, que são usadas entre o aplicativo. Então, por exemplo, eu quero uma variável pública para URL da API. Então este URL API, que será prefixado para cada rota que eu uso para o meu aplicativo ou para a minha API. Então, como vimos antes que cada API que tínhamos, é prefixado com algo como barra, api barra versão um. E isso significa que cada API no meu aplicativo terá esse URL. E, em seguida, API versão um. E então eu digo, por exemplo, produtos. E então eu posso postar, excluir ou criar alguns dados para esta API. Então agora vamos ver como podemos ler este prefixo. Então eu não quero repetir na minha API é sempre a string. Então eu posso corrigi-lo em alguma constante que é legível de todos os lugares. E então eu posso passá-lo para o microfone, para as minhas rotas de cordas, e então ele seria legível nessa rota. Então, para fazer isso, primeiro, normalmente, não no Node.JS, normalmente temos uma variável de ambiente chamada ponto n ou arquivo de ambiente. E que exemplo eu passo um nome de variável que eu quero, qualquer nome que você pode, por exemplo, API URL. E então eu posso dizer a string que eu quero passar, que é api barra v1. E neste caso, eu vou ter este URL API é definido em todos os lugares no aplicativo. Mas primeiro, como podemos ler esta variável a partir deste arquivo em nosso aplicativo, há uma biblioteca, podemos instalá-lo a partir de pacotes MPM. E chama-se EMF ponto-ponto. Então não podemos dizer npm instalar dot EMF. E esta biblioteca normalmente está disponível sempre. E podemos usá-lo no aplicativo JS na rota na raiz, Sem problema. Então podemos dizer definir ou podemos dizer exigir esta biblioteca. Então, o EMF não corta o conflito. E normalmente isso deve estar em uma string. Então, quando eu digo exigir esta biblioteca, então eu vou ser capaz de usar alguma constante específica para obter esses valores do arquivo M. Então eu irei aqui e definirei uma constante. Vamos chamá-lo, por exemplo, API. E então podemos dizer processo ponto, ponto, em seguida, o nome da variável que eu criei aqui. Então eu posso dizer API na URL da pontuação. Então vamos salvar tudo. E agora vamos tentar imprimir esta variável para ver se ele está realmente lendo este arquivo ou não. Então vamos fazê-lo no início quando iniciamos o servidor. Então eu vou dizer console.log, a API para constante. Então eu vou iniciar meu servidor, mpm start. E aqui está, já definimos. Então, em cada rota que eu tenho, eu posso definir ou passar esta variável API mais a rota que eu quero, por exemplo, produtos. Então, neste caso, eu terei a versão da API prefixada um mais produtos. Veremos isso mais detalhadamente nas próximas palestras para ver como criar a rota e como construí-la e como chamá-la. A coisa mais importante que você precisa saber agora que podemos criar as variáveis públicas neste arquivo e lê-las em qualquer lugar do aplicativo. Então, neste caso, eu quero armazenar, por exemplo, a cadeia de caracteres de banco de dados ou cadeia de conexão. Eu posso armazená-lo aqui neste arquivo e também, por exemplo, algum segredo para autenticação, eu também posso armazená-lo aqui. E quando eu quiser implantar o aplicativo no servidor de produção, vou alterar essas variáveis. Então, teremos também outro arquivo, por exemplo ponto EMF, mas para o servidor de produção, vamos ver que, claro, na palestra onde vamos implantar o aplicativo Node.JS. Então agora vamos passar para a próxima palestra onde vamos criar a API real e como vamos enviar dados JSON através dele porque precisamos de dados JSON para nossa e-shop para trocar com o front-end as informações sobre os produtos e a ordem e et cetera. 9. Crie a primeira chamada e parsing data Json: Agora vamos ver como trocar dados entre front-end e back-end. Vimos anteriormente como trocar dados com o front-end com a solicitação GET. Então nós enviamos Olá API. Mas o que fizemos foi apenas trocar uma string, que é Olá API. Então precisamos trocar dados JSON. Por exemplo, o produto é um objeto, consiste em ID, nome , imagem e preço. Então agora vamos simular a API de produtos. Então, no início, Vamos ter o bom prefixo como antes. Então eu vou usar os ticks traseiros, que são muito úteis para combinar entre constantes e strings sem usar este plus. Então, agora, vamos remover esta parte e criar um backticks. E com um sinal de dólar e suportes curvos. Vou fazer API. E então digamos produtos. Vamos remover esta parte daqui. E também este. E eu vou criar uma constante. Digamos produto. E este produto é objeto, contém ID, digamos um, e nome, digamos cabelo, cômoda. E imagem com, por exemplo, algum URL. Então você tem a opção aqui para selecionar aspas duplas ou cotação simples. Mas com JavaScript, É melhor usar sempre aspas simples nessa resposta. Vamos enviar este produto para o front-end. E vamos executar o aplicativo. Agora temos o aplicativo em execução. Vamos falar com o Carteiro. Carteiro é aplicação como conversamos antes e vimos como instalá-lo. Então eu não posso chamar APIs como com métodos GET, post, PUT, etc Então vamos ter aqui nossa API 3000 e, em seguida, api slash versão um slash produtos. E eu clico em Enviar. Então isso é pons é o objeto que eu já criei. Então, assumimos que estamos construindo este objeto, obtendo os dados do produto no banco de dados ou do banco de dados e, em seguida, enviá-los para o front-end com um GetMethod. Então, e se o usuário ou o administrador da aplicação da questão, vamos enviar, ou, por exemplo, criar um novo produto. Assim, o novo produto precisa de um dado que será enviado a partir do front-end. Então agora vamos mudar este método muscular de chegar a postar. Que exemplo eu vou copiá-lo e dizer post. Os pedidos de post também precisam de dados. Estes dados virão do front-end. Então, como eu obter esses dados do front-end, é muito simples usando o corpo do ponto de solicitação. Então, depois de postar os dados do corpo, eu vou enviá-los de volta para o front-end. Então vamos criar uma constante, digamos novo produto. E este novo produto será pedido corpo ponto. Então vamos fazer assim. Consola. Registre o novo produto. Então vamos ao Carteiro. Carteiro nós mudamos este método de chegar a postar. E o corpo da solicitação será, por exemplo, na linha JSON, que é JSON. E então eu posso passar, por exemplo, esse objeto. E quando eu clicar em Enviar, vemos que retornamos um. E no registro do console fiquei indefinido. Então o problema é que o corpo não é bem analisado. Então precisamos de algo chamado middleware. O middleware é uma função que tem controle de solicitação e a resposta de qualquer API. Então, quando o front-ends e objeto JSON, precisamos do back-end para entender que isso é adjacente. Então, por favor, analise e use-o no back-end. Então, para fazer isso, precisamos apenas usar uma coisa do Express JS. Então precisamos usar esse JSON. Assim, o Express aceitará dados JSON. E a coisa é muito simples. Como eu disse anteriormente, precisamos ter um middleware. E este middleware pode ser feito usando o uso do aplicativo. E então dizemos Express dot JSON. E este método, vamos tornar nossos dados compreensíveis pelo Express, que são enviados do front-end. E podemos digitar aqui como middleware. E no futuro, veremos que colocaremos todos os middleware. Nesta seção. Anteriormente, não era usado algo chamado BodyParser, e este corpo-analisador foi duplicado. Então agora em diante estamos usando Express JSON. Então, se você ver nas próximas palestras que estamos usando BodyParser, basta substituí-lo por expresso ou JSON. Então, desta forma, você garante que seu aplicativo será executado da maneira certa. Então agora somos capazes de fazer um get e também postar dos dados. Eu vou, por exemplo, mudar aqui cabeleireiro para e enviá-lo. E eu vou recuperar o cabeleireiro dois. Então agora nossa API está pronta. Estamos agora começando a construir esta estrutura de API para pedidos de produtos e 40 usuários, como falamos anteriormente na seção anterior. Na próxima palestra, veremos como registrar esses eventos de APIs. Por exemplo, quando alguém postar dados ou bons dados, vamos bloqueá-los no console do nosso aplicativo. 10. Solicitações de API de registro: É uma falha muito útil que o desenvolvedor para saber o que está acontecendo em seu servidor. Assim, podemos saber e registrar as solicitações HTTP que estão vindo do front-end, como postagens, get ou put ou delete. Para fazer isso, há uma biblioteca muito boa chamada Morgan, possamos usá-lo para registrar nossos pedidos HTTP que estão vindo do front-end. Então vamos instalar esta biblioteca. Eu paro o servidor, digamos, instalo Morgan. E depois de instalar esta biblioteca, podemos chamá-lo também com exigem. Então custou ao Morgan. Exigir. O Morgan. Nós dissemos que esta biblioteca é uma biblioteca de middleware, então temos que colocá-lo no aplicativo dot usar Morgan. E há algumas opções padrão, que é chamado Tiny. Isso é bom no caso de exibir as solicitações de log em um formato específico. Por exemplo, vamos executar o servidor novamente. Mpm começar. Então temos aqui que um servidor está rodando com o Postman. Vamos fazer alguns pedidos. Por exemplo, vou enviar o post novamente. Certo, de volta ao aplicativo ou ao código. Veremos que temos uma solicitação de postagem na API e com seu número de status específico. Vamos fazer um GET. Também. Aqui está um get, Enviar e voltar para o aplicativo. E eu vejo que eu logado também, eles GET pedidos. Há muitas opções para esta biblioteca, que você possa formatar seus logs como quiser. Mas não vamos fazer isso. Vamos usar apenas minúsculos. E, claro, você pode dizer com este logs em alguns arquivos, tudo isso é, é exibido aqui na documentação desta biblioteca. Agora estávamos usando apenas dados falsos do produto. Vamos começar a vincular esses dados ao banco de dados. Então vamos na próxima palestra para fazer a conexão com o MongoDB usando Atlas. 11. Instalando Mongoose e se conecta-se com o banco de dados MondoDB: Anteriormente vimos como falsificar dados do produto para armazená-los e exibi-los em nosso aplicativo. Agora o que precisamos é armazenar os dados no banco de dados. E neste curso estamos usando MongoDB. E como vimos antes, não precisamos instalar nenhum software especial para MongoDB. Só precisamos entrar na nuvem do MongoDB. E então criamos nosso banco de dados e conectamos nosso aplicativo a esse banco de dados na nuvem. Então, antes de tudo, como podemos conectar nosso aplicativo ao banco de dados na nuvem. Então primeiro precisamos instalar uma biblioteca chamada Mangusto. Mangusto é responsável por toda a operação do banco de dados MongoDB no aplicativo ou um aplicativo Node.js. Então vamos instalar esta biblioteca que se chama Mangusto. Vou digitar aqui npm instalar mangusto. E como todas as bibliotecas precisamos criar uma constante. Vamos chamar-lhe mangusto. E este Mongo, podemos dizer que requer mongóis. Podemos supor que esta coisa aqui é como importação. Então, estamos importando cada biblioteca e armazená-lo em uma constante. Normalmente, adicionamos a conexão ao banco de dados antes de iniciar o servidor. Então aqui vou dizer Mangusto, ponto conectar e desligar. Está pedindo uris. Uvis ou cadeia de conexão. Posso obtê-lo do MongoDB Cloud. Vimos anteriormente como se conectar à nuvem do MongoDB e criar nosso aplicativo e clusters e nosso projeto. E vimos que temos várias coleções, ou podemos dizer bancos de dados. E esses bancos de dados, teremos acesso a eles através do nosso aplicativo. Então vamos ver como podemos nos conectar a esses bancos de dados em clusters. Se eu voltar para clusters, vejo aqui um botão que diz Conectar. Quando eu digo conectar, eu posso usar várias opções do MongoDB. Por exemplo, o que precisamos é conectar seu aplicativo. Então precisamos usar uma cadeia de conexão para obtê-lo a partir daqui e colá-lo em nosso método de conexão com de Mangusto. Então, clicando nesta opção, vamos obter uma string de conexão. Vamos copiá-lo e tê-lo em nosso aplicativo. Então eu trago citações aqui e copio essa string de conexão. Mas não podemos ver que diz que estas cadeias de conexão devem conter um nome de usuário e senha e nome de banco de dados. Mas de onde eu não posso obter esta informação é simplesmente no MongoDB Cloud. Podemos usar um usuários específicos para se conectar a esses bancos de dados. Nós só precisamos ir para o acesso ao banco de dados e criar um novo usuário. E este usuário podemos conectar ao banco de dados na nuvem. Então, vamos clicar aqui, adicionar um novo usuário de banco de dados. E vamos dar-lhe um nome de usuário, E sharp usuário e a senha, você tem liberdade para selecionar qualquer senha. Por exemplo, eu coloquei de um a sete. Ele disse que a senha é fornecida é muito fraca. Então vamos adicionar algumas letras a ele. E, em seguida, adicionou com sucesso o usuário. Voltando à nossa cadeia de conexão, precisamos substituir esses dados aqui. Então, primeiro, vou colocar aqui o nome de usuário, usuário e-sharp, e a senha que eu tinha antes, e o nome do banco de dados. Certo, ainda não temos a base. Então vamos adicionar um. Voltamos para os grupos. E então podemos ver aqui nossas coleções. E nesta lista de coleções que eu tenho anteriormente, eu posso criar um novo banco de dados. Então eu vou dar-lhe um nome E-sharp, que a base eo mesmo nome para a coleção. Voltar pegou aquela cadeia de conexão. Podemos adicionar agora um nome de banco de dados. Então agora temos a cadeia de conexão completa. Falamos antes sobre variáveis de ambiente. Então vamos armazenar essa string nas variáveis de ambiente, então eu copiá-lo. E então eu crio, por exemplo, uma variável, chamá-lo de cadeia de conexão. E então eu dou este valor, que é a string que eu obtive da nuvem de banco de dados. E aqui eu só digo variável de ambiente ponto processo , ponto, conexão, string. Então agora como podemos verificar se estamos conectados ao banco de dados ou não. Se verificarmos este método Connect, notaremos que ele está retornando uma promessa. A promessa normalmente está sendo executada e está retornando dois métodos. Um é, então, quando seus sucessos e um com o erro quando é falhar. Então, aqui vou colocar. E, em seguida, se eu função seta e eu console log alguma mensagem, essa conexão de banco de dados está pronto. E quando falhar na captura. E também é o método de seta. Podemos dizer console registrar o erro. Vamos tentar iniciar o nosso servidor. Então agora o NPM começa. E vemos que há algumas notificações dizendo que o aviso de depreciação. Está dizendo que o analisador de string URL atual está obsoleto. Então precisamos usar alguma variável específica. Portanto, precisamos usar uma opção específica como verdadeira para fazer essa depreciação desaparecer. Mas como podemos usá-lo, vemos que este método de conexão tem outro parâmetro chamado opções. Então, com essas opções é um objeto onde eu posso passar as opções que eu quero. Então vamos copiar este. Adicionado como opção. Temos também outro aviso de depreciação que é usar topologia unificada. Isso também é usado para procurar os servidores. Então vamos adicioná-lo aqui. E vamos salvar. Ainda estamos recebendo um erro. Na verdade, o erro que precisamos passar também o nome do banco de dados nas opções. Então eu posso dizer que é uma palavra reservada, é chamado DB name. E com esse nome de TB, posso passar o nome do banco de dados. Nós nomeamos nosso banco de dados na Nuvem como e-shop que a base. E depois de salvar e tentar reconectar, vemos novamente que a autenticação falhou. No MongoDB Atlas, você precisa dar um eixo de rede. Então este acesso à rede, você precisa ter uma lista branca de IPs que podem acessar seu banco de dados. Então eu já tenho dois IPs. Eu posso adicionar outro IP indo, por exemplo, para o Google e apenas digite o que é o meu IP. E no primeiro resultado da pesquisa, obterei meu IP diretamente. Então eu vou aqui, copiar este IP, e então eu digo adicionar o novo IP. Então este IP é adicionado, eu posso dizer meu escritório em casa. E, em seguida, clique em Confirmar. Então, de volta ao aplicativo. Podemos ver se somos capazes de nos conectar ou não. Então só podemos pressionar Salvar novamente. E vemos aqui o servidor está sendo executado, mas ainda não obtivemos nenhuma resposta do servidor de banco de dados. E vemos que a conexão de banco de dados está pronta. Então, desta forma, nós conectamos a questão do aplicativo back-end para o banco de dados na nuvem. A próxima parte, vamos ver como gravar dados para este banco de dados usando nossas APIs que criamos antes. 12. Como usar o Atlas MongoDB: Claro, há também uma ferramenta local para navegar no banco de dados do MongoDB. Você não precisa usar nossa aula online. Você também pode baixar alguma ferramenta que tem mais, mais funcionalidade como veremos mais tarde, como exportar e importar dados. Porque eu quero dar-lhe os arquivos e os dados e o banco de dados que eu criei para não ser incomodado em preencher seus dados ou banco de dados por conta própria. Você terá os arquivos prontos. Então você pode usar esta ferramenta para importar como os bancos de dados e as tabelas e os documentos para o seu banco de dados também. Com esta palestra, há um link anexado para e algo chamado MongoDB Compass. E esta é uma ferramenta muito grande para navegar banco de dados MongoDB. E está disponível para todas as versões dos sistemas operacionais. Além disso, como para Windows, para um Ponto e também para Mac OS. Então, depois de baixar este link, ele lhe dará um aplicativo que você pode usar. E este aplicativo você pode instalá-lo em seus aplicativos e, em seguida, você pode abri-lo. Ok, vamos abrir o aplicativo instalado. Como eu mostro aqui, eu tenho isso aqui na minha lista de aplicativos, no meu sistema Mac. E vai acrescentar para mim o MongoDB Bússola. Como você vê aqui, estamos inicializando. Então está inicializando. E deixe-me ampliar um pouco como dar um tamanho maior. Então agora ele está me pedindo para adicionar uma cadeia de conexão, que nós criamos na palestra anterior para que eu possa ir e copiar minha cadeia de conexão e, em seguida, colado aqui e, em seguida, clique em Conectar. Já expliquei como obter o nome de usuário, senha e também o nome do banco de dados. Então eu já fiz isso. Então é recente. Eu tenho aqui o usuário e-shop e também MongoDB e todas essas informações entre ele. Então agora precisamos clicar em Conectar. E então ele vai se conectar ao meu banco de dados. Como você vê, eu listei todo o meu cluster, que são os que eu tenho no atlas. Então temos todos os bancos de dados que eu criei anteriormente. E também o banco de dados com o qual vamos trabalhar. Então você tem duas opções. Talvez você possa usar MongoDB Atlas ou MongoDB Compass, compostos MongoDB. Você não precisa olhar para o navegador e olhar para o site do MongoDB Atlas. Mas você pode ouvir o uso localmente. Basta abrir um aplicativo, adicionar sua cadeia de conexão, e ele será salvo aqui sempre. Neste curso eu vou usar MongoDB Atlas. E quando estamos indo para implantação, eu vou usar MongoDB Compass porque precisamos importar e exportar dados. E também. Na próxima palestra mais tarde, vou mostrar-lhe como importar e semear seu banco de dados. Você não precisa preencher todas essas informações manualmente, como o banco de dados. Então você já terá banco de dados que você pode importar para sua coleção e, em seguida, você pode usá-lo. Gosto de acompanhar o curso deles. 13. Leia dados em gravação em banco de dados usando a API: Perfeito, Então eu estou tão feliz agora que temos uma conexão bem-sucedida com o banco de dados, vamos agora tentar postar alguns dados para o banco de dados para que possamos vê-los no MongoDB Cloud. No banco de dados relacional. Anteriormente, vimos que a relação entre as tabelas, mas aqui no MongoDB é adquirir diferente. Podemos considerar a tabela de nomenclatura é uma coleção. Então, como vemos aqui, já temos um banco de dados. Dentro deste banco de dados, há uma coleção. Então podemos dizer que a coleção é uma tabela no banco de dados relacional. Apaguei o banco de dados que criamos antes. Vou criar um novo com a tabela, vamos chamá-lo de produtos. Então, por exemplo, dissemos que nosso nome de banco de dados é e-shop. Banco de dados. Products é o nome da coleção. Então eu tenho o banco de dados. Cada banco de dados e dentro que há uma tabela ou uma coleção. Podemos chamar-lhe um produto. Ok, ótimo. Então agora temos, digamos que esta coleção, vamos postar dados para esta coleção. Então, no Postman, como vimos antes, temos aqui para este objeto, vamos empurrá-lo para este banco de dados. Mas primeiro, o que precisamos fazer no aplicativo Node.JS, precisamos criar um modelo com Mangusto. Modelo é a mesma coisa que uma coleção. Então podemos dizer no MongoDB, é chamado de coleção e em Node.JS, é chamado de modelo. Então precisamos criar um modelo de produto. Este modelo conterá as colunas que precisávamos para o produto. Por exemplo, o nome ou a imagem, ou por exemplo, a quantidade do produto no armazenamento em Mangusto. Isso é chamado de esquema. E se formos lá para a documentação, vemos que o Mangusto tem muita flexibilidade aqui. Então podemos criar esquemas. Por exemplo, esquema de bloco como vemos aqui. E podemos colocar o título do campo, o autor, o corpo, e há um tipo dele, e cada campo tem algumas opções. Então você pode especificar, por exemplo, ponto de data. Agora, por exemplo, estamos neste registro ou este documento é criado, então veremos que ele leva automaticamente a data da hora atual. Então vamos começar de forma simples. Então, vamos primeiro criar o modelo do produto. Eu vou para o aplicativo e depois, digamos usar e antes das APIs. Eu crio, por exemplo, em constante, chamá-lo de esquema de produto. E este esquema de produto usará biblioteca e esquema de Mangusto. E o esquema aceitando um objeto e este objeto tomará os campos como vimos aqui na documentação. Então temos um novo esquema e aqui podemos listar nossos campos. Então vamos adicionar nossos campos que tínhamos antes. Então eu digo que preciso do nome. Nós digitamos é string. E, por exemplo, eu preciso também imagem. Que tipo também string. Ele conteria a URL da imagem. E vamos adicionar também algo como contagem em estoque. Contagem em estoque. E esta contagem em estoque será um número. Há muitos tipos. Você pode verificar a documentação de mangusto e veremos no curso os diferentes tipos que usaremos para a nossa aplicação de loja virtual. Depois de ter este esquema, precisamos criar o modelo. Então eu digo produto constante. Normalmente, os modelos começam com letra maiúscula. Então podemos dizer produto, que é modelo de ponto de mangusto. E o modelo chamado, ou a coleção é chamado de produto. E usando o esquema do produto que tínhamos antes aqui. Então eu digo esquema do produto, e eu pressiono Salvar. Agora temos o esquema do produto e o modelo do produto já definidos. Então agora precisamos, por exemplo, com pedidos de postagem, precisamos receber esses dados do post do front-end, que é que podemos dizer carteiro ou qualquer outro aplicativo como Angular ou React. E então precisamos receber esses dados pelo back-end, analisá-los e enviá-los para o banco de dados. Para isso, precisamos primeiro, precisamos criar um novo produto, por exemplo, desse modelo. Então vamos fazer isso. Podemos dizer produto const. E este produto é novo produto que tínhamos antes. Mas quais são os campos deste produto? Então o produto é este modelo que tínhamos antes. E nós vamos adicionar os campos desse produto, como o nome. E a imagem e a contagem em estoque. Então eu vou aqui e eu vou receber esse pedido, que eu recebi. Com este pedido, fico com o corpo. E com o corpo dentro do corpo, eu estou enviando aqui id, nome, imagem, e eu posso enviar também contagem em estoque. Será exatamente o mesmo nome aqui, que vem do front-end. Portanto, o front-end e o back-end devem concordar com a mesma nomeação para os campos e o objeto que são enviados para o back-end. Então aqui eu digo que o nome é pedido ponto corpo, ponto nome. A imagem é corpo de ponto de solicitação, imagem de ponto. Contagem em estoque também é da contagem de pontos de corpo de pedido em estoque. Agora temos o modelo pronto, então só precisamos salvá-lo no banco de dados. Então, para fazer isso, podemos dizer ponto do produto. E tem um método chamado Salvar. Salvar. Isso significa que salvá-lo no banco de dados. Se verificarmos este método salvar, ele está retornando uma promessa, promessa com o documento. Então podemos dizer, então está retornando uma promessa. Então podemos dizer produto criado. Então este é o produto depois que ele foi criado no banco de dados. Então é o nosso próprio método. Então, podemos dizer aqui, status de ponto de resposta, que é conexão bem-sucedida ou criação bem-sucedida do banco de dados do documento. Então eu posso dizer aqui ponto JSON. Então eu quero devolver o produto criado para vê-lo no front-end. E em caso de erro ou qualquer coisa pode acontecer, podemos dizer pegar o erro. E este erro, podemos dizer status de ponto de resposta. Por exemplo, 500. É o código de resposta para erros no ponto http JSON. Eu crio, por exemplo, meu próprio objeto. Eu digo que erro é o erro que eu tenho. E, por exemplo, eu digo se o seu sucesso ou não, talvez eu possa usar essa variável no front-end. Por exemplo, para terminar algum carregamento ou voltar para a página inicial. Se houver alguma falha. Já enviamos esse produto. Então vamos excluir esta parte aqui e iniciar nosso MPM backend, iniciar. Já o temos pronto e a conexão está pronta. Vamos postar alguns dados aqui. - Legal. É vangloriado, temos identificação, nome, imagem. Então, se formos para a nossa coleção no MongoDB, Vamos pressionar Refresh aqui. Temos os mesmos dados aqui. Vamos tentar novamente adicionando contagem em estoque. Digamos, por exemplo, 500 peças no meu estoque. Eu mando-o. Criei um novo produto com o mesmo nome e ele está retornando o ID do produto criado. Voltando ao MongoDB, atualize novamente. - Legal. Eu também tenho dois produtos já postados através da minha API no back-end. E notamos aqui que está trancado e bem sucedido. Vamos cometer um erro. Por exemplo, para cometer um erro, vamos tornar este campo conforme necessário. Então banco de dados reconhecerá que essa contagem no Stoke é obrigatório campo. Assim, ele irá responder com erro que você não enviou, por exemplo, a contagem em estoque. Para fazer isso, voltamos para o esquema e alteramos isso para um objeto. O tipo deste objeto é número e obrigatório é verdadeiro. Então vamos salvá-lo e executar nossa, novamente nossa API, mas sem contar em estoque. E se validarmos o JSON e enviar novamente, veremos que recebemos um erro, erro e sucesso, falso ou falhou. Então, neste caso, eu diria que o erro é validar ou contagem de caminho de erro em estoque é necessária. Então o banco de dados me respondeu que este campo é obrigatório. Quando eu fizer isso de novo, seu sucesso. Então agora temos postado um dado para o back-end. Vamos criar uma solicitação get. Então eu quero obter esses dados, exibir suas informações de produto no front-end, por exemplo. Então, para fazer isso, precisamos criar uma solicitação get. Então, criando uma solicitação GET simplesmente mudamos isso para obter. E precisamos especificar a lista de produtos. Então, vamos, por exemplo, obter a lista de produtos antiga. E se eu enviar o pedido, vou receber a antiga API que tínhamos antes. Então vamos alterá-lo para tê-lo a partir do banco de dados. Para fazer isso, vamos para a solicitação get e, em seguida, substituímos essa constante e chamamos, por exemplo, essa lista. E eu chamo apenas o modelo em si que criamos antes e encontramos. É isso. Então eu digo lista de produtos const ea resposta vai ter o nosso, me enviar a lista de produtos. Vamos tentar isso. Nós ascendemos. Percebemos que temos um erro aqui. O erro ocorre porque esse método find está retornando uma promessa. E aqui, quando estou enviando a resposta, talvez esta lista de produtos ainda não esteja pronta e eu ainda não a recebi. Então eu preciso esperar até que esta lista de produtos esteja pronta e então eu posso enviá-la com a resposta. Há outra maneira do que fazer, por exemplo, ponto então e não pegar. Isso é algo que podemos fazer com esperar palavra-chave. E na palavra-chave await requer sempre método assíncrono. Então eu coloquei este método aqui e é assíncrono, e eu tenho um peso aqui. Então, neste caso, quando eu chamo a lista de produtos, então ele vai esperar, ele será preenchido, e então eu envio a resposta para o front-end. Então vamos fazer de novo. Agora. Estou salvando e, em seguida, enviando esse pedido, vemos que temos os dados aqui. Não recebemos mais o erro. Então, é por causa disso que retornamos uma promessa. Devemos esperar que o banco de dados nos envie sua resposta, e então esperaremos no front-end. Então talvez você me pergunte como eu posso detectar o problema ou problemas. É muito simples. Eu posso dizer se uma lista de produtos ou nenhuma lista de produtos, se não houver lista de produtos, então eu posso dizer status ponto resposta 500. E, por exemplo, com JSON, posso dizer erro ou sucesso falso. Então, se houver algum erro aconteceu, por exemplo, conexão ou qualquer coisa, eu posso simplesmente retornar erro com um sucesso se esta lista estiver vazia. Então, temos duas maneiras diferentes de expressar e capturar erros do banco de dados. Então eu posso dizer aqui, encontrar, eu posso colocar um peso e assíncrono, ou eu posso fazê-lo com promessas normais. Como, por exemplo, eu digo Salvar, ponto então e pegar. Claro que isso é mais economia de código. Fizemos isso apenas em duas linhas, e isso é muito bom. Então, a partir de agora, usaremos sempre assíncrono e aguardaremos. Isso é tudo por enquanto é mangusto. Vamos fazer alguma refatoração. É muito bom ter as rotas em alguns arquivos e os modelos em outro arquivo. Assim, podemos ter mais organização do nosso código, do backend. 14. Analisando o banco de dados e e a base de compras: Bem-vinda de volta. Mudei de idéia aqui, então não faremos refatoração. Vamos analisar primeiro o banco de dados de e-shop. Assim, desta forma, podemos saber quais rotas e quais esquemas podemos construir e criar os arquivos no back-end. Então aqui temos menos das tabelas ou documentos ou coleções que precisamos em nosso banco de dados. Cada loja tem produtos, pedidos, categorias, usuários e itens de pedido. Esta é a loja eletrônica mais simples. Então, quando você quer crescer mais, você precisa ter mais tabelas como um comentário ou, por exemplo, algumas novas categorias são categorias maiores. Então começamos simples e vamos construir nossa loja virtual para ser maior lentamente. Em primeiro lugar, os produtos, por exemplo, tem ID, que é o ID do produto. E este ID é gerado quando postamos qualquer ID para o banco de dados automaticamente pelo MongoDB. O nome do produto e também a descrição. E a descrição atinge scription é usado para, por exemplo, eu quero armazenar algum código HTML. Às vezes as pessoas estão usando como uma descrição dos produtos com imagens e títulos e alguns textos de alcance complicado. Então vamos ver como teremos editor no front-end. Para HTML. Precisamos também da imagem principal do produto. E é uma string, string, que irá armazenar a URL para essa imagem. Além disso, precisamos de uma galeria de, uma galeria terá algumas imagens e matriz de strings, de URLs onde temos uma galeria do produto, mais detalhes sobre o produto. E então teremos uma marca e também preço, preço da categoria de produto. Será a categoria de tipo. No MongoDB. Aqui teremos algo chamado referências. Não é como bancos de dados relacionais, mas aqui podemos definir o tipo da tabela diretamente. Então, como veremos no futuro, veremos que esta categoria é um tipo de categoria ou tem uma referência à tabela de categorias. E conte em estoque quanto itens deste produto estão no armazenamento. Também classificação com base em comentários e se este produto é apresentado ou não. Então, para vê-lo na página inicial imediatamente como um produto em destaque. E então vamos ver que o que eles, este produto é criado quatro categorias. Só precisamos de um nome, talvez alguns dados adicionais. Por exemplo, o que eu preciso no front-end, às vezes cor, para que eu possa colorir cada categoria com base em alguma cor específica e também ícone ou imagem. Para pedidos, precisamos de itens de ordem, que é uma matriz de item de pedido. E o item do pedido é uma tabela onde contém o produto e a quantidade. Assim, cada pedido terá um produto e a quantidade. Então talvez eu tenha 10 produtos. Eu os pedi em uma ordem. E, em seguida, cada produto terá alguma quantidade. O endereço de entrega um e o endereço dois. E cidade, código postal, país, número de telefone do status do usuário para ver se esta ordem de nascimento é, por exemplo, dobrada, enviada ou entregue. E também o preço total. Veremos como calcular o preço total com base nos itens do pedido e no usuário que solicitou este pedido. Porque teremos que procurar todos os usuários que querem encomendar algo. E depois a data do pedido. Para os usuários. Precisamos de um nome de identificação, e-mail, onde o usuário fará login com seu e-mail e o hash de senha. A senha deve ser armazenada com hash no banco de dados. Não posso guardá-lo como texto simples. Rua, apartamento, cidade e CEP. E também país com um número de telefone. E também para saber se este usuário é admin. Assim, ele pode fazer login no, por exemplo, painel de administração ou não. Talvez alguém pergunte por que eu separei aqui o endereço do usuário. Como, por exemplo, eu posso ter tabela extra como endereço aqui. Então eu posso colocar este campo naquela mesa. E posso relacionar usuários e ordens com essa tabela de endereços. Na verdade, a maioria do Aesop tem um problema que às vezes o usuário, depois que ele pediu algo, ele mudou seu endereço. Mas o pedido já foi enviado. Portanto, precisamos armazenar o pedido como um avião com um endereço de envio, como o usuário o colocou, não relacionado ao endereço do usuário. Usaremos este endereço apenas para preencher automaticamente o endereço do pedido quando o usuário estiver solicitando algo após ele bloquear. Desta forma, tomamos uma visão geral sobre o nosso banco de dados no MongoDB. Agora vamos para o backend e criar os arquivos e refatorar nosso código um pouco para ser baseado nesta estrutura de banco de dados. 15. Crie rotas e esquemas de API de Backend: Bem-vinda de volta. Estou imaginando agora que se colocarmos todos os esquemas aqui neste arquivo App.js, seria muito grande. E acho que teremos milhares de linhas aqui. Então normalmente em Node.JS, as pessoas ou os codificadores em geral, eles estão colocando essas rotas, por exemplo, as rotas de API, e também os esquemas em arquivos separados. Para, vamos fazer isso agora e vamos ver como organizar o projeto mais melhor maneira. Esquemas assim por diante. Vamos criar uma pasta aqui. Chamamos-lhe modelos. E dentro modal, vamos criar um arquivo para cada modelo que temos, por exemplo, produtos ou produto dot js. Em produtos como eu vou colocar este esquema. Então vamos copiar esta parte e colocá-la aqui. Mangusto não está definido neste arquivo, então precisamos também copiar esta parte onde const mangusto exigem mangusto porque este arquivo não pode ver o mangusto importado no app.js. Então temos aqui const Mangusto e esquema de mangusto. E a propósito, vamos pegar também o magnata. Mas nós cortamos e colocamos aqui. Agora, como ArcJS usará esse modelo em Node.JS. Se queremos exportar uma constante ou, por exemplo, uma classe ou objeto, apenas dizemos que precisamos fazê-lo dessa maneira. Exporta produto ponto e, em seguida, o modelo. Então, aqui, neste caso, produto será visto em qualquer outro arquivo. E eu posso importá-lo com o método exigem. Então, indo para o arquivo ab.js e eu digo produto const, que está vindo de exigindo-lo a partir deste arquivo onde temos o modelo, por exemplo, modelos cortar produto. Neste caso, temos o produto e podemos usá-lo como um modelo para a nossa API. Vamos fazer mais refatoração. Vemos que temos todas as APIs, obter post, GET post. Então, se fizermos isso para todos os esquemas, seria um arquivo muito grande. Há uma maneira no Node.JS que você também pode armazenar as rotas ou as APIs em arquivo separado. Vou te mostrar como se faz. Então, primeiro vamos criar uma pasta do Word, roteadores de seca. E dentro do roteador, eu crio também produtos, o js. Então, para cada modelo, talvez existam roteadores. No Express. Há algo chamado roteador, e este roteador é responsável apenas por criar APIs, paralisar as APIs e importá-las e exportá-las entre os arquivos. Então, como fazer isso? Primeiro, precisamos importar o Express. Exigir Express. E o roteador fará parte do Express. Então, podemos dizer Express dot router. Então este roteador, quando eu importá-lo no ArcJS, eu posso usá-lo aqui. E este roteador, ele pode ser usado como um middleware, então eu posso usá-lo com o uso do aplicativo. Então, primeiro, vamos mover, ver como mover esses roteadores. Então, primeiro, vamos copiar todas as APIs que tínhamos e colocá-las aqui. Em vez de aplicativo. Eu só digo roteador. Isso é muito simples. E também os apago daqui. E como dissemos até o 2s é, ele pode usar também que exterior. Então, podemos tomar a principal rota API dos produtos e colocar aqui, por exemplo, roteador do produto. Mas de onde esses produtos roteador virá, ele virá a partir daqui. Então eu não posso dizer que eu quero exportar também o roteador. Então eu posso ir aqui e dizer que o módulo dot export é roteador. Então temos aqui uma maneira diferente para exportar. Aqui estamos exportando o produto em si, e aqui estamos exportando um módulo. Então, desta forma, eu posso dizer produtos roteador é uma constante. Então podemos dizer aqui, constante. Produtos roteador vindo de, exigem, de roteadores. E, em seguida, produtos. Então vamos ver aqui que esta aplicação está usando essas rotas a partir de rotas que estão vindo de produtos roteador. Então aqui precisamos fazer alguma coisa. Não podemos usar a API assim, porque caso contrário, será, podemos considerar isso como as crianças. Então, por exemplo, aqui, eu preciso colocar apenas o estoque para que eu possa considerá-lo quando eu digo localhost 3000 produtos de barra, então eu posso chegar a este, obter. E a mesma coisa para o correio. Se eu quiser algo no futuro como contagem, Eu colocá-lo assim, em seguida, a API será http 3000 slash produtos de contagem de barras. Então esta é a melhor maneira como podemos lidar com isso fora em um arquivo separado. Mas primeiro temos aqui o produto modelo. Portanto, precisamos também importar este modelo. Então eu digo const, produto é necessário a partir de modelos do produto. Agora temos as rotas concluídas. Então temos tudo começar post e vamos ver como adicionar a exclusão e atualização. Vamos salvar este arquivo e também salvá-lo aqui. Faça um pouco mais de organização do código aqui para que não precisemos mais dele. Assim, podemos ouvir, digamos roteadores. E aqui, o roteador do produto, podemos tê-lo aqui importado. Vamos ver agora se tudo funciona bem, podemos dizer MPM, começar. Tudo está conectado e tudo está funcionando como fumaça. A mesma coisa irá também para as outras coleções de banco de dados. Por exemplo, eu vou ter aqui ordens GS e também usuário e também a categoria. Também a mesma coisa para que autores. Terei os mesmos arquivos. Então, tenho certeza que você não está interessado em ver todo o processo porque é exatamente o mesmo. Vou adicioná-los. E então vamos ver depois disso como eles se parecem no final, nossa aplicação se parece com isso. Em app.js. Temos os middlewares, rotas, e também a conexão de banco de dados e o vendedor. Nas rotas. Criei rotas para cada tipo ou, ou para cada coleção que tínhamos em nosso aplicativo. Então eu vou aqui e criei isso exatamente como os produtos. Nós temos, as ordens dos usuários, categorias. E a mesma coisa para esquemas. Cada esquema tem o seu próprio agora. Então, neste caso, agora temos tudo pronto para criar nossas APIs. Atualmente, eu uso apenas entrar em todos os tipos. Só quero mencionar uma coisa. Quando exportamos o modelo das exportações ponto-produto desta forma, não desta forma. Quando importamos, precisamos importá-lo como um objeto. Então aqui, quando eu vou para os produtos, eu importá-lo assim. No ES6, temos essa destruição de objeto. Então este modelo está retornando um objeto. Então eu preciso criar um novo objeto e atribuir todos os campos desse objeto a este. Então, neste caso, eu posso usá-lo em todos os lugares certeza não há nenhum problema se você usar desta maneira. A forma de exportar o módulo diretamente. Vamos tentar a nossa API. Agora. Eu vou aqui e digo para pegar, eu tenho uma lista de produtos. Por enquanto, é isso. Para as próximas palestras, veremos como preencher esses esquemas e como conectá-lo às estruturas do nosso banco de dados. E vamos ver como continuar a construir a nossa loja electrónica de uma forma melhor. 16. Como habilitar CORS e por que precisamos com isso: Se você estiver fazendo um front-end e o desenvolvimento de back-end em seu mesmo tempo. Tenho certeza que você viu esse erro. Esse erro chamado Cross-Origin Resource Sharing, o que significa que em um idioma humano aplicativo Node.JS não pode confiar em nenhum outro aplicativo. Então, quando eu estou enviando solicitações do meu front-end para o backend, em seguida, o back-end quando Lot resposta para mim o mesmo que eu quero porque é proibido. Ele está usando porta diferente, que é totalmente um domínio diferente. Então, no meu aplicativo front-end, quando eu crio um serviço para chamar as APIs, então eu obterei esse erro. E na Mozilla org, eles estão explicando todos os dados ou todos os detalhes sobre este curso. Então, de alguma forma, no aplicativo NodeJS, precisamos habilitar esses cursos. Como podemos permitir que qualquer aplicativo solicite API do meu servidor. Há uma biblioteca chamada curso. Podemos usá-lo para permitir o curso para qualquer aplicação. Então eu parar o servidor e eu digo npm instalar curso. Depois de instalá-lo, precisamos exigir e importá-lo. Então aqui estamos importando tudo em ArcJS. Então eu digo curso const, exigir curso. E para habilitar o curso, é muito simples antes de tudo, antes do início do aplicativo, antes de usar qualquer serviço no aplicativo, precisamos fazer, não usar núcleos. E opções de ponto de aplicativo. Com estrela, como tudo. Usando o curso. Opções de pontos deste aplicativo. Isso significa que é algum tipo de solicitações HTTP, como GET e postar e colocar e excluir. Mas o que é isso? Quando nós Google opções http, vemos que a opção HTTP é um método solicita opções de comunicação permitidas para um determinado URL para o servidor. Então, quando eu digo, eu quero uma estrela, então eu estou permitindo tudo usando este curso. Então, neste caso, estou permitindo que todos os outros pedidos HTTP sejam passados de qualquer outra origem. Portanto, é muito importante usar este curso e habilitá-los a evitar esse erro. Finalmente, depois de terminarmos este módulo ou esta seção, eu diria que este projeto é a inicialização para nós para criar a questão do back-end. Então eu vou colocá-lo como um arquivo zip para que você possa baixá-lo e começar a partir daqui. Você pode ver este projeto em recursos com esta palestra. Nos próximos módulos, vamos ver como construir todos os esquemas e as APIs para cada parte do aplicativo. 17. Produtos e categoris: Agora as coisas começam a ser difíceis. Não, não estou apenas dando. Neste módulo, veremos como trabalhar com o próprio produto e suas categorias, é claro, na parte back-end. Então, os principais passos para criar o nosso produto agora, para importar todos os dados do produto para o front-end. O que significa que queremos criar uma API para recuperar todos os dados do produto para o nosso front-end. Então nós precisávamos de alguma forma como um JSON, isso também inclui a criação do produto e atualizá-lo e excluí-lo. Então, estamos indo primeiro para criar os esquemas de produtos e categorias no banco de dados no nível de aplicação. Além disso, começaremos o mais simples possível. Então categorias é a coisa mais fácil que podemos fazer agora. Então vamos fazer o resto API para categorias. E continuaremos a postar um novo produto no banco de dados através da API restante. E então vamos obter a lista dos produtos. E depois disso, obteremos um detalhe do produto por ID. E então veremos como conectar os produtos com a categoria. Por exemplo, quando estou recebendo um produto, vou ver como obter os detalhes da categoria dentro do produto. Depois disso, precisamos atualizar nosso produto. Então, às vezes precisamos atualizar o preço, ou queremos atualizar sua imagem, ou queremos atualizar o nome do produto. Excluindo um produto. Às vezes, quando não tenho o produto, apaguei-o da minha loja. E então queremos fazer algumas estatísticas como obter contagens de produtos, quantos produtos eu tenho na minha loja. Por exemplo, eu quero ver apenas os produtos em destaque. Porque se você se lembra, nós temos é bandeira destaque. Nós você sabe, quais produtos são apresentados para que possamos levá-los e exibi-los apenas na página inicial. E então é muito importante que tenhamos uma filtragem. Portanto, precisamos filtrar seus produtos com base em categorias. Então eu não vou apenas, por exemplo, algo para a saúde. Então eu recebo os produtos que estão lá categorias é saúde. Por enquanto, é isso. Espero que gostem deste módulo. Será um pouco detalhado, mas depois disso, você poderá criar os pedidos e os usuários, como vemos nos próximos módulos. 18. Esquema de modelos de produtos: Bem-vinda de volta. Nesta palestra, vamos ver como construir o modelo de produto ou o esquema de produto. Tudo em Mangusto começa com esquema. Cada esquema mapeia para uma coleção MongoDB e define a forma do documento dentro dessa coleção. Então, com base no modelo que você vê à direita da tela, vamos construir o mesmo esquema que construímos antes nesse modelo. Assim, os campos do produto podem ser como começar aqui, eu digo que o tipo deste campo é uma string. E há opções de esquema ou Opções de tipo de esquema. Essas opções de tipo de esquema, você pode vê-los na documentação do Mangusto. Então eu vou aqui para a documentação do Mangusto. Eu vou para tipos de esquema. E em tipos de esquema, podemos ver que existem muitos tipos. Por exemplo, string, number, date, e há algo chamado opções, como vemos aqui neste exemplo. Então eu vou, por exemplo, para Tipo de Esquema, e vejo que há caminho e opções na documentação de Opções de Tipo de Esquema, eu posso ver todas as opções que eu preciso para construir meu esquema. O que precisamos realmente para o nosso curso, eu acho que precisamos desse campo obrigatório e também algo chamado href para referência a outra tabela e padrão, que é um valor padrão quando o objeto é criado do produto. Portanto, o nome do produto é sempre necessário. Eu defini isso como verdadeiro. O próximo campo é a descrição, que será uma breve descrição do produto. E será também uma corda. É necessário? Eu diria que a breve descrição será necessária no nosso caso. E então vamos para a descrição rica. Na descrição rica é também tem uma cadeia de caracteres de tipo. Mas eu diria que não é necessário. E podemos colocar um valor padrão para ele quando ele é criado. Por exemplo, eu digo string vazia. A mesma coisa vale para a imagem. Então eu coloquei dizer aqui também, a imagem é uma string e tem um valor padrão como vazio. Agora vamos às imagens. Imagens. Eles são sempre matriz de cordas. Então podemos colocá-lo simplesmente como este array. E o tipo de cada item desta matriz é uma string. Temos também marca, que é será a mesma coisa. Corda e preço. Assim, o preço será na forma como o tipo é o número. E o valor padrão. Podemos dizer que é 0. O próximo passo agora precisamos adicionar a categoria. Então é simples. Dizemos que categoria é tipo de ID de categoria. Então aqui no produto, quando eu quero adicionar um produto, eu uso o ID da categoria, não a categoria inteira. Então eu digo que o link entre a tabela e do produto e a tabela de categoria é o ID da categoria. Então, o tipo deste campo será esquema de ponto Mangusto, tipos de pontos, ID de objeto ponto. Então, neste caso, eu preciso passar sempre o id. E como eu diria que este ID está conectado à tabela de categorias ou esquema de categoria. Eu só faço isso. Eu digo que uma referência é esquema de categoria. Então, neste caso, este ID será conectado ao esquema de categoria. Então, quando eu adiciono produto, é pesquisar em categorias e eu pego ID específico. E então eu digo que este produto tem categoria, por exemplo, beleza e saúde. Isso é necessário? Sim, vamos adicioná-lo conforme necessário. O próximo campo que fazemos já é contar em estoque. Contagem em estoque, É normalmente um número e necessário. Então você precisa especificar quanto deste produto você tem em seu armazenamento. Há também outra propriedade que podemos colocar max e Min. Por exemplo, eu digo mínimo tem 0 e máximo. Tem 255, por exemplo. Então eu digo aqui que quando eu postar um produto com menos número de contagem em estoque, então eu vou ter erro porque mangusto, quando ele se virou para mim e me diga que, não, isso é errado. Você precisa colocar o número entre 0 e 255. O mesmo vale, por exemplo, para classificação e também uma série de comentários. São números. Então eu os adicionei aqui. E o campo é destaque é o tipo Booleano. Portanto, o valor padrão dele é false. Então isso é para mostrar o produto na página inicial como um produto em destaque. Além disso, eu tenho a data do campo criada. Assim, os dados criados são uma data de tipo e o valor padrão é ponto de data agora, por isso é muito simples. Então, quando o produto ou este pedido vem, então levará o tempo atual. Agora temos todos os esquemas estão prontos para o seu produto e veremos mais tarde como adicionar produto nos pedidos de post e como obtê-lo. 19. Categorias modelo e esquema: Anteriormente, criamos o esquema de categoria. E como você vê aqui no modelo à direita da tela, precisamos criar esses campos. Então vamos começar com o nome. É exatamente a mesma coisa que fizemos para o produto. Então eu digo tipo string necessário através. Então, para não levar tanto tempo na digitação, eu vou adicionar os outros campos porque eles também estão tendo o tipo de string. Então aqui temos ícone e cor. O ícone será o nome do ícone, por exemplo, estamos usando alguns ícones de fonte ou ícones de material do Google. Então eu posso dizer apenas o nome do ícone. E também eu digo aqui a cor, essa cor será um hash, hash string, como algo como eu posso dizer 000 000, que é preto. Assim, desta forma, eu posso armazenar a cor da categoria que eu preciso exibir no front-end. Então vamos começar agora com a criação da API da categoria. Na próxima palestra, vamos ver como adicionar categoria e excluído. 20. Adicione e exclua categorias: Ótima. Então, de volta ao mundo real. Agora vamos ter a categoria API. Então, nesta palestra, saberemos como adicionar uma categoria e remover uma categoria. Comecei simples aqui porque a API categoria é a mais simples que veremos no futuro. Como criar APIs mais complicadas, como os produtos e os pedidos. Então, como você se lembra antes de criarmos as rotas e rotas, estamos adicionando nossas APIs. Temos aqui um GET, vamos editá-lo para fazer melhor maneira ou podemos mantê-lo para obter lista de produtos. Agora, vamos adicionar uma categoria. Então, criando postagem ponto roteador. Então eu vou adicionar uma categoria, então por barra e, em seguida, assíncrono, solicitação e resposta. Então eu vou fazer aqui a adição ao banco de dados usando Mangusto e adicionando uma nova categoria. Vimos antes que a solicitação sempre recebendo as informações do front-end, como o usuário está enviando as informações. E então vamos lê-los e postá-los no banco de dados. Vamos criar, por exemplo, uma constante, podemos chamá-lo ou deixar categoria. E este será um novo modelo de categoria. Então, esta categoria, nós já importamos ela aqui. E teremos o objeto desta categoria será nome e também ícone e cor, exatamente como o esquema. Então, como eu obteria esses dados? Então solicite o nome do ponto, corpo, ponto. Então o front-end deve me enviar exatamente esse nome. Então também a mesma coisa vale para o ponto de solicitação, ícone, ponto ou desculpe, ponto, corpo, ícone ponto. Também para a cor. Nós adicionamos aqui. A cor. Se você se lembra, quando publicamos um produto aqui, tivemos algo como salvar. Então eu digo o modelo dot save, e então este save vai me devolver uma promessa. E então eu retorno com o status que criou os produtos. E nós conversamos antes também sobre esperar e assíncrono. Então vamos fazer isso agora com um peso e assíncrono. Então, usando um peso e uma pia, eu digo categoria, que eu criei antes. Posso dizer que o nosso peso de categoria, que eu criei ponto salvar. Então, neste caso, estou esperando até que isso seja salvo. E este salvamento retornará para mim uma promessa com o documento ou a própria categoria que é criada. E então eu verifico se não há categoria, como nenhuma categoria criada. Então eu digo erro de retorno. Assim, o status do ponto de resposta dirá 400 quatro, por exemplo, pontos e que a resposta, por exemplo, ou a categoria não pode ser criada. Por exemplo. E, em seguida, se houver categoria, então eu digo pontos de resposta terminam a categoria. Isso é muito simples. Como recapitulação, crio um novo modelo de categoria e, em seguida, preenchi com dados. Eu o salvei usando Mongos e então eu estava esperando aqui até que esta categoria esteja pronta. E então eu verifico se há categoria, há dados dentro desta categoria, então eu envio. Mas se não, estou retornando um erro. Vamos iniciar o nosso servidor agora. Mpm iniciar conectado ao banco de dados. Está tudo bem. E eu uso o Carteiro. Carteiro, por exemplo, eu criei esta categoria. Eu disse que o nome é saúde e ícone é ícone saúde e alguma cor. Envio-o e vejo que foi postado com sucesso. E eu tenho uma nova identificação desta categoria para verificar se está realmente funcionando. Vamos novamente ao Atlas e checamos no banco de dados. Eu vou aqui e já encontrei. Então vamos criar outra categoria. Por exemplo, como computadores. E este computador tem ícone computador e alguma cor específica no front-end você pode criar um captador de cores. Coletor de cor. Vamos atribuir a você o código da cor. Por exemplo, eu digo 444, e eu envio e criei um novo. Vou ao Atlas. E diga “refrescar”. E veremos que essa categoria também é adicionada aqui. Então temos computadores e saúde. Agora vamos excluir uma categoria. Excluir uma categoria é a mesma. Então não podemos dizer ponto roteador, excluir, não postar. E eu digo isso que eu quero atribuir para excluir uma categoria. E então eu digo pedido e resposta como um retorno de chamada. E eu usaria esse pedido e resposta. Vamos fazer isso aqui com o jeito prometido. Fizemos isso antes com um peso e assíncrono. Vamos fazer isso aqui com um jeito promissor. Então, primeiro, eu chamo o modelo, eu digo categoria ponto. Há método chamado encontrar por ID e remover. Então, encontramos um ID por e removê-lo o mesmo com encontrar por ID e excluir. Então aqui eu preciso encontrar a categoria que eu quero excluir. Então, por ID. Então, onde eu vou obter o ID de, eu vou obter o ID do usuário ou do cliente. Então o cliente vai me enviar o ID alguma forma e então eu vou encontrá-lo no banco de dados e excluído. Então, como posso obter a identificação do cliente? Há uma maneira, é muito boa maneira. É através da URL. Então eu não posso dizer aqui por dois pontos e então eu posso dizer por ID. Então este ID, você pode colocá-lo como quiser, como qualquer nome que você quiser. Em seguida, o URL será parecido com api barra v1 barra o ID, que eu quero excluir da categoria. Então, aqui, como eu vou obter esse ID do URL. É muito simples. Eu digo solicitar pontos params ponto ID. Então aqui este nome é o mesmo nome que, como eu designei aqui. Então, por exemplo, eu digo id de categoria. Eu, então eu devo colocar aqui ID de categoria. Então, antes de vermos que pedimos o corpo. O corpo é quando enviamos o pedido dentro do corpo. Então aqui temos corpo e estamos enviando o corpo do pedido, os dados. Mas agora vamos enviá-los ou vamos enviar o ID pelo URL. Então, como vemos aqui, que este método retornará para nós uma promessa. Então eu vou dizer então e, em seguida, a promessa vai retornar para mim um documento eo documento que é a categoria excluída. Então eu digo aqui, se há categoria, como se você encontrá-lo, em seguida, retornar um ponto de resposta, ponto status ou desculpe, 200 e ponto JSON. E eu posso criar meu próprio objeto. Posso dizer que o sucesso é verdadeiro e alguma mensagem para o usuário. Então não posso dizer a ele que a categoria foi deletada. E então, se não houver categoria, quando eu não encontrar essa categoria mais, eu digo retorno, status de ponto de resposta. O código não encontrado é 404. E que JSON, eu digo sucesso, falso. Então eu não encontrei essa categoria e nada é excluído. Então eu posso dizer na categoria de mensagem não encontrado. Mas e se houver algum erro no servidor? Por exemplo, não sobre não encontrar essa categoria, mas algum erro, como erro de conexão ou se eu comprar os dados errados, ID errado. Então não posso dizer isso com o erro de captura. Eu digo que, por favor, encontre para mim ou envie-me uma mensagem de que há um erro aconteceu no servidor. Em geral, não se trata de categoria encontrada ou categoria não encontrada. Então aqui eu digo resposta de retorno, status de ponto. O erro em geral é 400. Então, JSON. E então eu digo que o sucesso é falso. E então eu posso enviar o erro para o front-end para o usuário. Então, agora vamos testar esta API, a exclusão da categoria. Vamos criar um e excluir iniciando o servidor novamente. Mpm começar. Estamos conectados a esse banco de dados. Então vamos criar, por exemplo, uma nova categoria de computador, por exemplo. Sim, este nome, mantemos o mesmo. E eu copio esta categoria. E então eu altero esse método para excluir. Então aqui eu digo depois de categorias, eu digo o ID da categoria que eu quero excluir. E então eu carrego em Enviar. Boa categoria é excluída. Se obtivermos a lista de categorias novamente, se você quiser, você pode ver aqui o histórico do que você fez antes. Então vamos obter uma lista de categorias. Ainda temos a velha categoria que a doença de saúde que excluiu também. Então eu posso ir aqui e dizer para apagar esta identificação. E então, se eu voltar para obter, eu teria matriz vazia. Então não temos nenhuma categoria. Agora, vamos tentar excluir o ID não encontrado. Por exemplo, posso dizer 444 aqui. Então, quando eu enviá-lo, Eu tenho sucesso categoria falsa não encontrado. Isso é bom. É exatamente a mensagem que queríamos. E também, vamos cometer um erro. Normalmente, se você quiser cometer erro ao excluir o ID de categoria ou objeto ID tem este formato no MongoDB. Vamos mudar esses formatos. Por exemplo, eu faço isso curto assim. Então, quando eu enviar, eu recebo aqui o erro. Então o erro é 400 e então eu digo que o sucesso cai e o erro aconteceu. Trata-se de ID de objeto porque está formatado errado. Você tem aqui essa escolha para fazer entre métodos assíncronos, aguarde ou com então. Assim, as promessas podem ser em ambos os sentidos. Você não tem nenhuma diferença. Mas aqui também é mais guiado e aqui é o código mais curto. Na próxima palestra, vamos ver como obter lista de categorias e também uma única categoria. 21. Obter categorias e detalhes da categoria: Nesta palestra, vamos obter uma lista de categorias e categorias de detalhes. Então, primeiro vamos fazer a lista de categorias. Já fizemos isso antes nas palestras anteriores. Então, aqui estou usando GetMethod e, em seguida, eu estou usando find. Com o uso deste método, eu vou obter lista Categorias. E se houver lista de categorias, então eu vou conseguir, eu vou enviá-lo por resposta. E se não houver nada, então eu enviarei erro. Vamos editar, editar aqui. E podemos dizer estado 2s 200 que encontramos a lista de categorias. Agora vamos obter uma categoria por ID. Então eu vou dizer aqui ou alterar. Também é pedido GET. Então este get vai aceitar a mesma API, mas com parâmetro como vimos antes. Então eu usaria aqui método assíncrono, solicitação, resposta, função. E então eu vou fazer uma categoria constante. E aqui eu usaria o método aguarde. Então eu vou fazer aqui chamado a categoria. E há método chamado find by ID. Então, usando este método, vou pedir o id da solicitação params dot ID. E vou verificar se não há categoria, em seguida, enviar a resposta errada ou erro. Se houver categoria, então eu enviarei com essa resposta. Então aqui eu fiz isso rapidamente. Se não houver nenhuma categoria, envie a resposta 500. A mensagem para o usuário dizendo que a categoria com o ID fornecido não foi encontrada. E se houver categoria, então enviarei com essa resposta. Vamos testar isto com o Carteiro. Então, a lista de categorias é a versão da API uma barra categorias e um pedido get que eu envio, mas eu não tenho nenhuma categoria. Vamos adicionar um. Eu tenho o pedido de correio aqui, e eu já tenho o corpo neste aqui. E vamos adicionar outro como saúde. Saúde. Isso é o fim. Portanto, temos que voltar agora para o pedido GET. Ligue de novo, tenho dois pedidos ou duas categorias. Vamos obter esta categoria apenas por ID. Então eu vou passar apenas o ID após o URL. Vou clicar em enviar. E eu tenho a categoria detalhada aqui no meu pedido de API. 22. Categoria de atualização: Bem-vinda de volta. Então agora vamos atualizar a categoria. Atualizar categoria significa que vamos atualizar o nome ou a cor ou o ícone. As solicitações HTTP para fazer isso é chamado Realtor ponto colocar. Então nós colocamos, eu posso atualizar os dados no banco de dados. Mas aqui é uma mistura entre pegar os parâmetros e pegar o corpo, os params. Vamos usá-lo para obter o ID do produto ou a categoria que queremos atualizar. E então nessa resposta ou no corpo do pedido, vamos fazer isso. Vamos obter os dados que são atualizados. Assim, da mesma forma aqui, solicitação assíncrona e resposta será um método ROM. E então eu vou constante a categoria em alguma variável. E então eu vou dizer esperar por categoria e encontrar por ID e atualizar. Então eu posso encontrar o produto e, em seguida, nossa categoria, e então eu atualizá-lo. Portanto, o primeiro parâmetro deste método é request dot powerapps dot ID. Então eu tenho que passar o ID, que eu obtive do usuário. E o segundo parâmetro é o objeto onde contém os dados atualizados. Então categoria tem um nome, ícone e cor. Então obtendo-os a partir do corpo de ponto pedido, nome de ponto. A mesma coisa, exatamente como postamos uma nova categoria. Então eu vou fazer isso aqui. Então, se eu conseguir categoria, então tudo está bem e tudo foi atualizado. Se não, então há erro. Então, vou implementar esta lógica. É exatamente o mesmo que temos no correio. Então eu vou copiar o mesmo e colocá-lo aqui. Então eu salvei conectado ao banco de dados, e esse é o estado com o Postman. Então aqui temos a lista de categorias que criamos antes. Agora vamos tomar este ID e alterar este método para um put. E então eu passo a identificação que eu tenho. E o corpo será diferente. Por exemplo, aqui temos computadores de elefante 11. Vamos mudá-lo, por exemplo, para eleger através de fonics. E o ícone será o mesmo eletrônico, e a cor é 55 quando eu enviar. Então o que eu tenho aqui são os dados antigos em Node.JS. Há uma opção se você quiser obter de volta os dados antigos que você envia, ou por exemplo, que era a categoria original ou os dados atuais que você atualizá-lo. Porque se formos aqui e pressionar em get, veremos em nossa lista os dados atualizados. Teremos aqui, os eletrônicos. Mas aqui no pedido PUT, retornamos os dados antigos. Então, neste caso, em Node.JS, você precisa passar um parâmetro para o find by ID e update, que é chamado é objeto, é claro, e você pode dizer um novo através. Então aqui isso significa que eu quero retornar os novos dados atualizados. Vamos salvá-lo e tentar novamente. Então vamos para o porto. Vamos, por exemplo, mudá-lo para outra coisa, por exemplo, beleza. E eu disse “Beleza”. E eu clico, então eu tenho os dados atualizados. Se eu disser novamente aqui com a lista, Eu tenho todos os dados atualizados. 23. Poste uma API RESTo de produtos: Então, nesta palestra vamos ver como postar um novo produto. Como trabalhar com categorias. Vamos também publicar um novo produto. Então só precisamos coletar os campos, os mesmos campos que são enviados do front-end. E, em seguida, adicione-os como um modelo de produto e salve-os no banco de dados. Anteriormente, fizemos essa parte. Então vamos refatorar e fazê-lo com nosso modelo e com nosso banco de dados. Então vamos criar nossa cópia dos campos que tínhamos no modelo. Então aqui eu já sinto os campos para não tomar tanto tempo em preenchê-los. São todos iguais. Estão todos vindo do corpo. Vamos reduzir também aqui o código para que possamos usar assíncrono e aguarde. Então, aqui vou adicionar assíncrono. E então vamos descer. E dizemos, temos, por exemplo, produto é igual a esperar e o produto que criamos o modelo de produto ponto salvar. Então nós temos aqui agora o novo produto é criado depois de salvá-lo. Então vamos apagar esta parte. E dizemos aqui, se não houver nenhum produto, então retornado como uma resposta, o código de status é 400 ou 500, que é como um erro interno do servidor. E, em seguida, envie uma mensagem informando que o produto não pode ser criado. E se tudo correr bem, então devolva o produto. Então, o que há de especial aqui? A coisa especial aqui que você pode postar o produto facilmente, mas e se o usuário ou a frente e centro na categoria errada? Então, por exemplo, se eu tiver algum ID de categoria e o usuário criou ID sozinho, e esse ID da categoria não existe em nenhum lugar no banco de dados. Então vamos primeiro validar se há categoria existe ou sabe. Para fazer isso. Podemos fazer a mesma coisa, podemos fazer, categoria Const. E nesta categoria dizemos aguardar um novo modelo de categoria. E encontre por ID. Já vimos isto antes. Então eu digo pedido corpo ponto, categoria ponto. Assim, o front-end na categoria irá enviar o ID da categoria que eu quero adicionar ao produto. Então aqui, se não houver categoria, então retornar status de ponto de resposta, por exemplo, 400, que o usuário cometeu um erro e ele está enviando categoria inválida. Então, em geral, temos todos os campos e o usuário deve enviar a categoria. Se tudo for válido, ele continuará e adicionando seu produto normalmente. Vamos tentar isso com o Carteiro. Então eu vou para o Postman e eu crio uma nova API. E o link será o mesmo. Http e categorias, não categorias. Precisamos de produtos. Então caneta eu acho que agora podemos adicionar o corpo aqui. E este amigo será o tipo de linha. E esta linha não é texto, é JSON. Assim, o front-end irá enviar bloco adjacente para o back-end. Então eu já tenho preparado para não perder tempo digitando isso. Então eu tenho o nome, a descrição e leitura descrição, imagem, marca, preço, categoria, e a categoria. Eu peguei a string da lista de categorias. Então, se você se lembra, temos duas categorias. Copiei um e adicionei aqui. E a contagem de ações é 10. Classificação é para não tanto bom produto. E críticas. O número de comentários é 22. E está em destaque? Sim, é verdade. Então, agora, quando eu enviar o produto, eu vou obter resposta do produto e com um novo ID do produto. Vamos verificar a base de dados do Atlas. Aqui está Atlas e temos aqui MongoDB, Eu recriar uma atualização. Então vemos aqui que o produto já está publicado. E notamos que a categoria tem ID de objeto. Vamos agora tentar enviar categoria inválida. Então vamos remover, por exemplo, isso e torná-lo 80. Por exemplo. Enviar eu tenho categoria inválida. E isso é ossos é 400 mau pedido. Então, a coisa especial na postagem de um produto é apenas como nós o vinculamos à categoria. Então você deve validar cada categoria que já existe no banco de dados e, em seguida, enviá-lo para o post com a publicação do produto. Desta forma, você terá um produto válido que está realmente ligado a uma categoria. 24. Obtenha um produto e lista de produtos API REEST: Quando estávamos preparando nossa API, fizemos uma solicitação get para uma lista de produtos. Então, como vemos aqui, a lista de produtos é salva com find. E então vamos devolvê-lo para a frente que. Então vamos tentar isso com nossas mudanças. Com o Carteiro. Eu vejo aqui o produto, Eu mudo o post para obter. E vemos que temos matriz e lista de produtos. Isso é muito simples. Vamos criar uma solicitação GET apenas para um produto. Será exatamente o mesmo que obter lista de produtos, como vimos antes. Nós só precisamos aqui para adicionar o parâmetro ID. E vamos mudar esse nome para produto. E agora, se houver um produto, então, se não houver produto, desculpe. Então você retorna um erro. Se houver produto, envie-o novamente para o front-end ou para a API. Mas o que precisamos mudar aqui não é bom, mas encontrar por ID. E o ID, como vimos antes, vem de solicitação olhado pelo ou, params de ponto desculpe, porque temos os parâmetros no URL, o ID. Vamos salvar e tentar. Agora. Copio, por exemplo, um dos IDs que tenho aqui para produtos, e coloco aqui depois do produto. Então eu tenho a identificação aqui. E eu digo, eu entendo, então eu tenho os detalhes do produto exatamente como aqui. Gostaria de mencionar aqui que, por exemplo, na lista de produtos, às vezes se eu tiver uma grande lista de produtos, eu não tenho que enviar todos os dados. Por exemplo, se eu quiser no front-end exibir apenas o nome do produto e a imagem. Então eu manivela criar uma API específica que retornando apenas lista de nomes e imagens dos produtos. Vamos tentar isso agora. Então sempre, depois que temos encontrar aqui, encontrar método, se eu clicar em ponto, então eu vou encontrar um método chamado select. Então é exatamente como selecionar uma consulta. Então eu posso passar aqui quais campos eu quero exibir. Então eu digo, por exemplo, eu preciso apenas do nome. Então vamos dizer aqui nome em uma string e salvá-lo. Então aqui vamos remover o produto único e obtemos uma lista. E vemos aqui temos uma lista de produtos e apenas os nomes se quisermos, por exemplo, nome e imagem. Então eu vou para esta string e eu adiciono apenas espaço. E então o campo que eu quero exibir, por exemplo, eu digo imagem, e então eu salvo. Vamos ao Carteiro e conseguiríamos imagem e nome. Observamos aqui que há ID, então também podemos excluir esse ID. Como podemos fazer isso. Nós também vamos para a mesma string, e nós temos o ID neste caso. Então eu posso dizer menos a identificação. Então, quando eu pressionar Salvar, eu vou para o Postman, enviar esse pedido. Agora tenho uma seleção limpa. Dessa forma, você pode criar suas APIs com mais desempenho e eficiência. Então você não tem nenhum obstáculo nas memórias para carregar para o cliente. Você precisa de uma lista de produtos. Então mande o que precisa. Então você pode criar uma API especial para isso. Então você pode enviar o que quiser através desta API. 25. Mostrar detalhes da categoria no Populate de produtos: Então, como vimos anteriormente, que estamos recebendo um único produto dessa maneira. Então, mas o campo de categoria é apenas o ID. Se eu quiser, por exemplo, exibir o produto com o nome da categoria. Então eu tenho, por exemplo, o detalhe do produto, mas eu também quero mostrar seu nome. Então não é bom ir e obter outro pedido para a categoria e, em seguida, mesclar esses dois pedidos juntos e mostrar no front-end o que eu preciso. Há uma maneira muito bonita de fazê-lo em MongoDB e Mangusto. Então, depois de encontrar pelo método ID, quando eu pressionar ponto, eu vê-los MSO não é preencher. Preencher significa que qualquer ID ou campo conectado a outra tabela será exibido como detalhes neste campo. Então, o campo é tem, por exemplo, ID, que está vinculado a outra tabela, como vimos antes no esquema que temos aqui, criamos a categoria é ID do objeto e a categoria de referência. Então esta categoria é realmente ID como vimos antes. Então eu digo uma população agitada. Categoria. Vou para o Postman e, em seguida, clique em Enviar. Vejo que tenho os detalhes da categoria. Então aqui desta forma, quando eu crio uma solicitação GET para um único produto, eu suponho que eu estou em uma página de produto. Eu envio uma solicitação para obter os detalhes do produto, e então eu recebo também os detalhes da categoria para que eu possa exibi-los também na página do produto. Ele também funciona com a solicitação GET. Então eles entram em geral. Então, se eu quiser aqui ter toda a lista preenchida, então eu só digo preencher categoria de todas as listas de produtos. Eu pressiono Salvar, vou para o Carteiro. Eu recebo lista de produtos e IC eles já povoados. Alguns deles, eles não estão conectados a uma categoria. Eles são anteriormente nós os criamos. Então aqui, por exemplo, este produto, ele tem uma categoria e ele está conectado a alguma categoria no banco de dados. Então, como uma recapitulação, se alguém lhe perguntar como eu posso conectar tabelas MongoDB juntos como banco de dados relacional, Eu apenas criar um campo na tabela original. E então eu digo neste campo que eu quero um ID de objeto e ele é referenciado para o esquema que eu criei para a outra tabela. E, em seguida, quando estou criando uma solicitação GET, eu digo preencher este campo. Portanto, este campo deve ser um ID e, em seguida, ele irá preencher o que está relacionado a essa tabela. 26. Atualize uma API de REPOSIÇÃO de produtos: Então agora vamos atualizar nosso produto. Atualizar um produto é exatamente a mesma maneira como atualizamos uma categoria. Mas como vimos no post, precisamos apenas validar a categoria. Embora indo para categorias, vamos copiar todo o pedido PUT seria exatamente o mesmo. E então eu vou para o produto, eu adiciono a nova rota. E aqui temos o produto ou colocar ID. E então vamos fazer a mesma coisa, que fizemos para a categoria. Então vamos mudar isso para produto. Aqui está o produto, o modelo do produto. Encontre por ID e atualize. Temos os perímetros solicitados identificação de params e eu vou pegar os campos daqui. Vamos copiá-los o mesmo e colá-los aqui. Então temos todos os campos do produto, novo. Sim, queremos devolver o novo produto. Se não houver nenhum produto, envie uma solicitação incorreta ou erro interno do servidor e, em seguida, diga, o produto não pode ser otimizado. E também, se tudo estiver bem, envie o novo produto de volta. Só agora falta a parte onde precisaríamos validar a categoria. Então, novamente aqui temos a mesma coisa aqui. E então eu digo colar categoria de custo, e então eu estou pedindo categoria. E se isso não for categoria, envie categoria inválida para o usuário. Então vamos tentar agora com o Carteiro. Vou ao Carteiro, vamos copiar ou já temos os campos aqui. Então podemos mudar isso, começar a colocar. E aqui passo a ideia de que quero mudar. Então eu digo aqui, por exemplo, este ID. E então vamos mudá-lo para o produto um em novo. E aqui também descrição você e Ford exemplo. Vamos atualizar o preço 32. E é isso. Enviamos a solicitação de postagem e temos um erro aqui dizendo que é categoria inválida. Então vamos fazer a categoria certa. Então vamos aqui para as categorias API e pegar o caminho certo e atualizado aqui. E eles enviam, nós recebemos novamente o novo produto. Então vemos ou ouvimos o produto novo e a descrição está em U e com o novo preço. Então a única coisa que fizemos aqui que nós também, nós validamos a categoria. Então, no front-end, como veremos mais tarde, que teremos Fórum do produto. Então, quando eu clicar em Editar, então eu vejo os campos já preenchidos. Então eu apenas atualizo os campos que eu preciso e então eu envio esse pedido novamente. Vamos verificar também o banco de dados se tudo estiver atualizado. E depois recebo a lista de produtos. E vejo aqui que o produto tem uma nova descrição e um novo nome. E, claro, também, o seu preço. 27. Apagar uma API RESTo de produtos: Além disso, excluir um produto é da mesma forma como excluímos uma categoria. Mas aqui eu quero mencionar algum ponto que é muito importante para validar nossa API. Vamos primeiro copiar também que excluir solicitações de categorias. Vou pegar este e, em seguida, colá-lo aqui na API do produto ou rotas do produto. Nós substituímos tudo para o produto. Tudo é substituído. Então, agora temos todos os estados. E vamos tentar agora. Vamos pegar uma lista de produtos. Teremos todos esses produtos. Vamos remover os antigos porque eles estão vazios. Então, podemos selecionar um dos IDs, alterar isso para excluir, e enviar essa solicitação. Agora passa e o produto é excluído. O que quero mencionar aqui é algo muito importante. E daí se eu mandar uma má identidade como esta? Eu vou ver que eu vou obter o erro de que o ID do objeto não é válido. Portanto, precisamos também validar o ID do objeto em todas as solicitações. Então, neste caso, pegamos um erro. Mas aqui no pedido PUT, esse pedido não há qualquer captura do erro. Estamos apenas verificando se estamos recebendo um produto ou não. Mas aqui está a verificar a identificação, por isso vai pendurar de alguma forma. Então vamos mudar isso para a solicitação PUT e fazer um problema no, no ID. Por exemplo, removo este e, em seguida, envio uma solicitação e vejo que o back-end está pendurado. É por isso que prefiro mais assim, a maneira prometida. Para que eu possa dizer sempre o que posso ver, o que eu posso obter e o que eu posso pegar. Mas se você quiser manter desta forma, então também não podemos validar apenas a categoria. Podemos validar a identificação. Como podemos fazer isso? O ID deve ser o tipo de ID de objeto que é armazenado em Mangusto. Então aqui vou começar primeiro a fazer uma constante. Exigir mangusto. Este mangusto constante. Ele tem um método onde eu posso usá-lo na solicitação PUT. Então eu não posso dizer ponto Mangusto é ID de objeto válido, então eu posso passar, em seguida, a solicitação dot params dot ID. Então, se isso é válido, então eu continuo. Caso contrário, retornarei uma resposta sobre o erro. Então, como vemos aqui, isso está devolvendo um booleano. Então vamos colocá-lo dentro de um “se”. Então eu digo aqui se Mangusto. Então eu vou enviar também um pedido ruim desta forma e eu digo ID do produto inválido. E neste caso, o produto ou a API retornará para mim erro quando eu estiver passando junto ID. Vamos tentar agora. Temos identificação errada. Vejo que não retornei nenhum erro. Isso é porque eu disse se é válido, em seguida, retornar erro, então eu não deveria ter válido, então eu adicionar não. Então vamos voltar novamente e enviar o pedido novamente. E recebo o ID do produto inválido de erro. 28. Obter contagem de produtos para fins estatísticos: Bem-vinda de volta. Às vezes, no painel de administração, eu quero mostrar ao administrador quantos produtos eu tenho no banco de dados. Então, neste caso, eu quero ver uma API que está me devolvendo todos os produtos ou quantos produtos eu tenho no banco de dados. Então, ele retornará apenas um número. Mangusto tem muitos métodos. Assim, com base nesses métodos, você pode retornar qualquer consulta que desejar com uma API. Por exemplo, em Mangusto, você pode ter do produto modelo qualquer método que deseja retornar. Assim, você pode criar sua própria API com base no que Mangoose fornecer a você. Não vou contar os produtos. Quero o preço total dos meus produtos. Eu quero, por exemplo, total ou preço dos pedidos, total de vendas, quaisquer estatísticas que eu quero ter no meu front-end, por exemplo, eu quero ter painel de administração. No futuro. Vou mostrar-lhe isso com algumas estatísticas. Então, para isso, você precisa criar API, que é obter normalmente para obter o que você quer do banco de dados. Então vamos adicionar um novo aqui, como roteador dot get. Seria GetMethod, claro. E, em seguida, dizer, por exemplo, obter contagem de barras. Assim, a API será depois que os produtos recebem contagem. Então, o segundo parâmetro, será o mesmo que GetMethod. Então vamos copiar este da mesma forma e mudar a estrada lá. Então eu digo obter contagem, eu tenho resposta assíncrona e aqui eu preciso mudar com base no que Mangusto me dá. Então, criamos uma constante, chamamos de contagem de produtos. E aqui eu excluiria até o final e dizer, por exemplo, há um método conjunto de documentos contagem. Então eu quero ver quantos documentos neste modelo ou nesta tabela. Então contar documentos e, em seguida, ele irá retornar a contagem ou como um retorno de chamada. E então eu digo apenas devolva a contagem. Então eu recebo a contagem e devolvo. E então os documentos de contagem foram devolvidos para mim, a contagem de produtos. Então aqui eu digo, se não houver contagem de produtos e, em seguida, retornar um erro para o usuário, senão, enviar a contagem de produtos. É isso. Normalmente devolvemos um JSON. Então, por exemplo, eu digo aqui, contagem de produtos é uma contagem de produtos, ou, por exemplo, eu digo que apenas contagem é contagem de produtos. Você tem liberdade aqui para escolher qualquer nome. Prefiro este. Vamos testar que nós supostamente homem, eu vou para Postman e então eu digo produtos GET método, obter contagem. E nós executamos isso. E vemos que a contagem de produtos é três, então é realmente três. Vamos verificar isso. Sim, eu tenho primeiro 1, segundo, 1, terceiro 1. Isso é fixe. Então, agora podemos mostrar ao administrador quais produtos ou quantos produtos ele tem em sua palestra. 29. Obtenha produtos em destaque API: Outra solicitação de estatísticas pode ser, por exemplo, eu quero os produtos em destaque, como vemos aqui na página inicial deste site. Estamos vendo alguns produtos em destaque que são exibidos sempre na página inicial. Então, anteriormente no modelo de produtos, tínhamos algo ou algum campo chamado é destaque. É destaque tem um valor booleano como true ou false. Isso significa que este produto deve ser exibido na página inicial ou não. Agora vamos fazer uma API para obter apenas os produtos em destaque. E para torná-lo mais complexo, podemos ter conta. Então, por exemplo, eu posso obter três produtos em destaque ou últimos três produtos em destaque ou últimos seis produtos em destaque. Vamos fazer isso agora. Portanto, qualquer solicitação GET é como começar com router.get. Então vamos copiar este e criar nossa API em destaque. Ou, em vez de começar a contagem, vamos dizer, ficando em destaque, produtos em destaque, por exemplo. Então, em Mangusto, precisamos encontrar os produtos em destaque. Apenas, nem todos os produtos, apenas o destaque. Então eu digo aqui, produtos ponto encontrar. E como você se lembra antes, tivemos alguma filtração. Nós acabamos de falar sobre isso, mas veremos como construir um filtro com o produto. Então, de qualquer maneira, então agora eu acho que ele está aceitando como objeto e então você pode definir quais campos são necessários para ser o valor. Então, por exemplo, eu digo que é destaque deve ser um verdadeiro. Então, todos os produtos que tem apresentado através, então eu vou obtê-los. Então aqui tudo ficar o mesmo é feito apenas o objeto. Então ISA aqui acabou de devolver para mim os produtos. Então eu digo aqui produtos, produtos, produtos. Agora vamos verificar isso com o Carteiro. Eu vou aqui, eu digo Obter recurso. Então nós enviamos e temos apenas um produto em destaque porque temos apenas um produto em destaque em nossa API, então em nosso banco de dados. Então, se verificarmos aqui, então o primeiro tem, é falso. O segundo também é falso, mas o último é apresentado. Ok, então agora eu não quero sentir a minha página inicial que apresentou produto, por exemplo, eu tenho como esta página, por exemplo, eu tenho 200 recursos produtos. Então eu não vou apenas, por exemplo, cinco produtos. Para fazer isso, podemos merecer também alguma limitação à nossa API com base no que o usuário está enviando. Por exemplo, posso adicionar aqui, como vimos antes, podemos adicionar qualquer parâmetro como antes, adicionamos um ID. Mas aqui podemos adicionar contagem, por exemplo. E então aqui eu vou conseguir essa contagem. Contagem é igual a solicitar os parâmetros porque seu parâmetro e contagem. Então, se houver contagem de pontos de solicitação ou solicitar uma contagem de pontos de parâmetros de torque, se o usuário passar algo, em seguida, obtê-lo. Caso contrário, retorne 0. Então isto é como se estivesse aqui. Então, se há contagem passado com a API, em seguida, obtê-lo. Caso contrário, retorne 0. Portanto, esta contagem pode ser este valor ou este valor. É exatamente como a declaração IF. Então, como vamos usar essa contagem? É muito simples. Depois que eu encontrar o que eu quero, apenas o produto em destaque, Eu digo contagem limite. Então vamos tentar isso com o Carteiro. Nós dizemos para ser destaque. E então a contagem que eu quero, por exemplo, três, então eu vou enviar esse pedido. Nós não vamos é que ele está pendurado. Portanto, há um erro. Vamos verificar qual é o erro. O erro está dizendo aqui que o campo incapaz de analisar produtos de busca é apresentado através do limite de rejeição três, Return key false. Então, por que isso está acontecendo? Campo Limite deve ser numérico, mas nós o temos numérico aqui. Porque isso, porque aqui, esta solicitação dot powerapps dot count está retornando, como você vê aqui, uma string. E isso também será uma string. Então temos aqui um valor de string, não um número, porque limite é pedir um número. Então, para mudá-lo para facilmente para um número, basta colocar um plus por trás desta bebida. Então, agora, depois de salvar e reiniciar, o servidor, pede nossa API. Nós vamos obter o produto em destaque. 30. Filtragem e obtenção de produtos por categoria: Continuando com a filtragem, Vamos ter também filtragem por categorias. Então, quando o usuário seleciona algumas categorias específicas, ele vai obter os produtos que estão nessa categoria. E isso é filtragem normal em todas as oficinas. Então, precisamos de alguma forma ajustar a solicitação GET ou obter solicitação de lista de produtos para ter filtragem por categoria. Mas primeiro, preciso falar sobre algo que experimentamos antes. Dois tipos de parâmetros que podemos enviar para o backend. O primeiro é o parâmetro URL. Assim, o usuário pode enviar qualquer ID depois que eles, você está doente ou no parâmetro corpo. Então, temos corpo. E dentro deste corpo existem alguns parâmetros, e também com a URL. Então, temos outro tipo de passagem de valores para o backend, que é chamado de parâmetros de consulta. Os parâmetros de consulta são usados sempre. Nesse caso, por exemplo, eu tenho URL API, URL localhost e, em seguida, passo o parâmetro de consulta. O parâmetro API é passado assim, então eu posso passar aqui número, mas o parâmetro de consulta está indo sempre após um ponto de interrogação. Então eu não posso dizer sempre que eu preciso aqui de uma categoria. Então, como vimos antes que também podemos filtrar no método find. Então, depois de passar o modelo e, em seguida, encontrar, podemos passar objeto como fizemos antes. Como é apresentado como um dos campos deve ter este valor. Mas agora vamos torná-lo como categoria. Então este Find devemos ter categoria e com um ID específico que é passado pelo usuário. Mas como podemos torná-lo múltiplos valores, porque aqui eu posso ter apenas um único valor. É muito simples. Você pode apenas passar uma matriz e automaticamente mangusto vai perceber que todos esses valores devem estar nessa categoria. E, em seguida, isso irá retornar os produtos certos que tem essas categorias melhores. Então eu não posso dizer aqui algo como isso, primeira categoria e segunda categoria ID. Então vamos fazer isso aqui como algo diferente. Então, para ser mais diferente. Então agora precisamos pegar de alguma forma este parâmetro de consulta e dividi-lo em uma matriz e, em seguida, passá-lo para este achado. Então, é muito simples. Eu digo que se houver um ponto de solicitação, categorias de ponto jquery, que é este, então vamos armazená-lo em alguma constante. Const, por exemplo, filtro. E este filtro, teremos as categorias de consulta de ponto de solicitação de valor. E vamos dividir esse valor. Então dividimos por vírgula. Então nós dizemos dividir, dividir a string com base em vírgula, e então ele vai retornar para mim para itens na matriz, que é uma string e a outra. Então, simplesmente, podemos colocar esta variável aqui porque nós a dividimos como matriz. Mas por causa do escopo em JavaScript, não podemos atribuir esse valor ou usa valor fora disso se, porque outros campos não podem vê-lo. Então, é melhor criar a variável aqui e dar-lhe como matriz vazia. E essa variável, eu atribuo a ela a divisão, e então eu estou usando isso aqui. Vamos tentar isso com o Carteiro. Então eu fui aqui e tentei pegar o produto. Não recebo nada porque estou forçando a API a ter categoria. Então, quando não há nada, então ele deve ter uma categoria. Então vamos ter uma maneira mais dinâmica. Eu faço isso como objeto vazio. E este objeto vazio será atribuído e tem valor quando há parâmetros e ou parâmetros de consulta. Então diga que eu digo categoria é esta. E então este filtro, eu removo todo esse objeto e então ele será passado para a multa. Então, quando está vazio, não há nada. Então eu vou pegar toda a lista do produto. E quando há parâmetros de consulta, ele seria preenchido com categoria, que é nossa condição, e ele terá esse valor do usuário. Vamos tentar de novo. Agora. Eu envio esse pedido, legal. Eu tenho todos os produtos anteriormente. Criei alguns produtos, por exemplo, produto 1 e produto 2 e produto 3. E eles têm de diferentes categorias, por exemplo, essa categoria e essa categoria. Então eu digo aqui, categorias de pontos de interrogação. E o valor dessas categorias. Vamos pegar a primeira categoria. Por exemplo, este aqui. E eu envio, e então eu tenho duas categorias ou dois produtos. Então esses dois produtos, eles pertencem a esta categoria. Vamos adicionar outro. Por exemplo, o segundo, dividindo-os com uma vírgula. Então eu digo aqui. Então temos 123. O primeiro produto é da segunda categoria, e os outros dois produtos, eles são da primeira categoria. E quando eu passar nada, então ele funcionará normalmente para obter toda a lista dos produtos. Então, aqui o usuário tem a opção de passar os parâmetros de consulta ou não. Então agora na minha página inicial, eu posso ter, por exemplo, alguns banners que estão exibindo alguns produtos específicos de categorias e também o usuário quando ele vai para a página do produto, você também pode filtrar esses produtos por categoria. Por exemplo, será algo como caixas de seleção ou, por exemplo, algumas pílulas. Então ele pode clicar sobre eles e selecionar as categorias para as quais você deseja exibir os produtos. 31. Alterando a chave "_id" para "id" — mais amigáveis: Quando estou recebendo um produto ou lista de produtos, Mangusto ou MongoDB está enviando o campo com o direito de como eu os fiz. Mas a identificação, tem um pequeno problema. Tem este sublinhado. Eu quero que o ID seja apenas ID como uma chave, para que eu possa usá-lo em todos os lugares em meus aplicativos, não apenas, por exemplo, para o aplicativo que estamos fazendo neste curso. Então eu posso usar este backend com outros aplicativos que normalmente estão aceitando principalmente o ID apenas como uma chave. De alguma forma. Mangusto, também podemos copiar este ID e criar um campo chamado ID apenas sem sublinhado. Então, como fazer isso? Chama-se virtuais. Então, com este esquema de produto, que criamos antes, sempre podemos criar uma ID virtual. E esta ID virtual terá um get. E este get será a partir do ID que é passado no esquema do produto. Então esta é uma maneira de como fazê-lo e para hexadecimal string porque temos strings hexa para o ID, que é chamado ID do objeto. E então precisamos habilitar alguma opção para o esquema do produto. E dizer que quando eu quiser enviar algum valor para o front-end ou para a API, nós habilitamos os virtuais porque este é um campo virtual. Então, em cada esquema, podemos adicionar essas duas ou quatro linhas ou dois métodos. E então teremos a identificação. Então, se tentarmos agora com o Carteiro, eu posso enviar. E eu vou dizer que eu vou ter o ID original e o ID que eu quero. Então, o shopping front end amigável, eu posso usar este ID diretamente sem este sublinhado incomodando. 32. Introdução: Agora chegamos ao último módulo, que relacionado com a parte de trás e desenvolvimento. Precisamos agora fazer upload das imagens com o nosso produto, como vimos antes, o produto contém dois campos. Um deles é uma imagem principal e o segundo campo é as imagens. Então, onde será mais descrição sobre o produto como uma galeria de imagens? Então, neste módulo, você verá o passo principal é instalar a biblioteca Walter. Biblioteca é uma biblioteca famosa usada para carregar arquivos para o servidor usando Node.JS. E no segundo passo, vamos descobrir a melhor configuração para o nosso e-sharp porque precisamos configurar esta biblioteca para usar e carregar os arquivos para o nosso servidor. O terceiro, vamos ver como usar o destino e carregou os nomes dos arquivos. Sempre que o administrador carregar um arquivo ou uma imagem, ele deve especificar o nome do arquivo. Mas não, não podemos fazer isso para o administrador ou para o usuário. Não temos que deixar que ele nomeie o arquivo. Você pode fazer upload de qualquer arquivo e ele será codificado em nosso servidor. Usando Postman também é muito importante para o nosso caso aqui para testar o upload de imagem, vamos ver como testar o upload de imagem com um carteiro usando o upload de um arquivo ou vários arquivos. E não permitiremos que o usuário faça upload de nada. Precisamos que ele envie apenas tipos específicos de imagens, como a extensão PNG para J Beck. E, claro, tudo isso feito para um único arquivo. Agora precisamos estender a biblioteca para tornar possível o upload de vários arquivos. E vários arquivos são necessários para que possamos carregar muitas imagens para a galeria de produtos. E finalmente, vamos ver como buscar este produto com as imagens e as imagens da galeria para vê-las no front-end. Claro, vamos buscar apenas o URL da imagem. Espero que você vai desfrutar deste módulo e vê-lo na próxima palestra onde vamos começar a instalar biblioteca de argamassa. 33. Modelo e esquema para usuários: Como tínhamos em nosso modelo de usuário antes, vemos que precisamos de um nome e e-mail e senha, etc Então vamos construir nosso esquema de usuários exatamente como temos neste modelo. À direita. Eu já os escrevi para que possamos revê-las rapidamente. E então você pode implementado a partir do código que eu vou enviar para os recursos. Primeiro, o nome do usuário é uma string e é obrigatório. Em segundo lugar, o e-mail é uma string e também verdadeiro necessário. E também o hash de senha. Nós dissemos que vamos salvar a senha com hash no banco de dados. Será uma string e é necessário. O número de telefone do usuário também será uma string ou um número. E com a verdade e é necessário. Aqui, vamos identificar o usuário se ele é administrador na loja ou não. Então será um booleano e o valor padrão é false. O endereço que será usado para enviar a ordem do usuário. Então, podemos usar uma rua como uma string, eo padrão é o valor vazio. Apartamento também é String. Código postal é uma cadeia de caracteres, cidade e país. E no final temos um esquema de usuário, como fizemos anteriormente com os produtos, criamos um ID virtual. Então conseguiríamos identificação dessa maneira, não dessa maneira. Então, é mais amigável para usuário ou front-end. Então, podemos usá-lo no front-end como um ID normal para buscar dados do usuário ou identificar um usuário. E aqui nós habilitamos os virtuais para o esquema. E aqui a exportação normal do módulo e do esquema. Então isso é tudo sobre o esquema do usuário. Vamos passar agora para criar um usuário ou usuário registrado em nossa loja virtual. 34. Registre uma nova API RESTo de usuários: Nesta palestra, vamos ver como registrar ou postar um novo usuário como qualquer solicitação de postagem. Também podemos postar os dados do usuário no corpo da solicitação e, em seguida, enviá-los para o banco de dados. Então, para torná-lo rápido, Vamos copiar um dos pedidos de post que temos antes, por exemplo, a categoria. Então vamos copiar este e, em seguida, colá-lo em nosso módulo de rotas de usuário e começar a adicionar as solicitações de corpo com base no modelo que tínhamos antes para o usuário. Então vamos sentir todos esses campos como se os tivéssemos do front-end como normais e colá-los aqui em nosso pedido. Então, primeiro de tudo, vou ajustar isso para ser usuário. E aqui usaríamos modelo de usuário. E então vou esperar para salvar o usuário. E, em seguida, se não houver nenhum usuário, em seguida, responde com o erro de que o usuário não pode ser criado ou registrado. Então vamos adicionar os campos que precisamos agora. Então eu vou separar essas duas telas e, em seguida, eu vou adicionar meus campos aqui. Então, nome, o mesmo nome. E e-mail será e-mail. E aqui o e-mail do corpo. Vamos fazer rápido para o resto. Agora, nosso novo modelo de usuário ficará assim. Então eu coloquei todas as chaves ou todos os campos, que eu obtive do esquema. E lá eu assumi que estou recebendo isso do corpo do pedido. Então este amigo e pedido virá do carteiro ou do front-end. Como veremos a seguir. Vamos tentar isso com um carteiro agora. Então vamos criar um objeto, por exemplo, e eu vou atribuir um usuário e um hash senha e todas essas informações nesse objeto. Então, qual será a rota completa para isso? Será a rota da API e, em seguida, os usuários. Por quê? Porque no app.js, tínhamos antes, todas as rotas de APIs são definidas aqui. Então eu estou dizendo produtos AP US e, em seguida, eu atribuir as rotas de produtos. E então aqui teremos usuários. Então, em nossa API, vamos usar usuários. Então, indo para o front-end, Vamos copiar uma das APIs que tínhamos antes e colá-lo aqui. E aqui. Em vez de produtos, diremos usuários. Isso é perfeito. Então vamos adicionar um post. E então, no corpo, adicionaremos uma linha. E o tipo dessa linha é JSON, porque o usuário enviará os dados em um formato JSON. E então vamos criar nosso objeto aqui. Então eu diria o nome, e eu atribuo qualquer nome, por exemplo, James, e a mesma coisa para o resto. Então vamos senti-los. Então temos aqui a senha hash, o número de telefone, o administrador, Sim ou não, apartamento, CEP, cidade e país. Então, neste caso, teremos um usuário que tem essas propriedades. Não devemos colocar a senha assim. Então temos que hash, como veremos na próxima palestra. Então eu poso os dados agora e recebo todas essas informações. Então temos aqui nome do que nome de usuário, e os dados e todas as informações que inserimos. E também a API respondeu com ID e ID de sublinhado. Assim, o usuário criou no banco de dados. Vamos checar nosso banco de dados no Atlas. Então, quando vamos para o nosso cluster e, em seguida, coleções, eu vou acessar nosso banco de dados, que é usuários ou banco de dados e-shop e os usuários da tabela. E vamos ver o usuário é criado aqui. Acho que perdi um campo que não é enviado com a API, então temos que adicioná-lo. Então vamos adicioná-lo aqui, que é rua. Então colocamos três também, e é 3s. Por exemplo, 100. Vou adicionar usuários diferentes com nomes diferentes para sentir nosso banco de dados. Então eu vou dizer James, por exemplo, eu diria Tom e Tom aqui. E a mesma senha, vamos supor que ele tem 777 aqui e o mesmo endereço, por exemplo. E vamos enviar, enviar. Teremos também o mesmo que também outro usuário como Mike. Teremos aqui, Mike pequeno M. e também a mesma informação como digamos aqui 88. E o número da rua, por exemplo, cinco, o apartamento é 4. Então, neste caso, em nosso banco de dados tínhamos três usuários. Como veremos aqui. Estou refrescando a página. E veremos aqui que temos três usuários. 35. Como criar o Hashing a senha do usuário: Salvar a senha, neste caso como um texto simples não é seguro porque se alguém tem de alguma forma nosso banco de dados, ele verá a lista de todas as senhas de todos os usuários em nosso banco de dados. Então, é melhor de alguma forma para hash ou codificado alguma forma para que qualquer um não possa entender o que é isso, a senha real por trás deste hashing ou é codificação. Para fazer isso, há uma biblioteca, que é fornecida pelo NodeJS. Chama-se descriptografar os JS. Podemos instalá-lo aqui em uma nova janela. Então MPM instalar ser preso JS. E eu vou instalar esta biblioteca e, em seguida, importá-la no meu aplicativo. Então eu diria causado, ser agarrado e exigir descriptografar JS. Então, como vamos usar esta biblioteca? Então eu não vou pedir ao usuário ou ao front-end para um hash de senha. Vou pedir uma senha normal, mas internamente no meu back-end, vou criptografar essa senha. Então aqui eu vou dizer ser crypt dot, hash sync. E, em seguida, Hash Sync irá pedir uma string e também algo chamado sal. O sal é, por exemplo, como informações extra secretas para que qualquer pessoa não possa descriptografar esse hash. Então, por exemplo, vou acrescentar aqui o meu segredo. Você pode adicionar qualquer segredo. Por exemplo, você pode dizer meu cigarro. Você pode adicionar qualquer coisa. Vou adicionar aqui, por exemplo, número, é 10. E não vou pedir ao usuário um hash de senha, mas vou pedir-lhe simplesmente uma senha. Vamos tentar isso agora e vamos ver o que o servidor ou o backend nos responderá depois de criptografar a senha. Então, aqui, vamos criar outra senha de usuário, não hash de senha. Então, será de um a seis também. E ele tem algumas informações como tínhamos anteriormente. Não vamos torná-lo administrador, por exemplo. E eu vou enviar, e vamos ver aqui o hash de senha como este. Então não é exatamente o que o usuário enviou. Então, vamos usar de alguma forma quando fazemos login, vamos comparar este hash com a senha que o usuário usou quando ele bloqueou. Isso também será feito pela biblioteca descriptografar. Então agora temos um back-end seguro ou objeto seguro do usuário para que ninguém possa resolver ou descriptografar essas informações. 36. Obtenha o usuário e a lista de usuários excluindo a senha: Como vimos antes, que criamos solicitação GET para obter lista de usuários. E também podemos criar a mesma coisa para obter um único usuário. Então copiá-lo de categorias também. E eu vou mudar essa categoria de usuário. Então, desta forma, temos uma lista de usuários e obter um único usuário. Vamos tentar isso com um carteiro. Eu vou aqui e não vou conseguir um usuário que tenha sua identidade. Há assim e eu não vou listar os usuários. Então eu os pego assim. Temos um problema de segurança aqui. Eu não quero enviar a lista de usuários com seu hash de senha. Portanto, é melhor enviar a API ou os campos API sem senha Hash. Como podemos fazer isso? Anteriormente, vimos que podemos excluir algumas partes da nossa API ou alguns campos. Como fazemos isso depois de chamar o método find, colocamos Select e, em seguida, eu pressionar Minus, e, em seguida, com menos, eu posso especificar qual campo deve ser excluído. Por exemplo, aqui neste caso, direi hash de senha. E, em seguida, quando eu chamar a API, eu vou ver que eu tenho campos sem hash senha. Vamos fazer isso também para o único usuário. Vou colocar aqui selecionar, ou podemos copiar isso diretamente. Ele também funciona com find by ID, como com find e width, find by ID. Salve isso. Experimente. E vamos obter, por exemplo, esse usuário com esse ID que eu postei aqui. E vemos que temos esse usuário sem qualquer hash de senha. Nós também podemos, ao obter lista de usuários, por exemplo, no painel de administração do meu aplicativo, eu só quero exibir o nome do usuário e, por exemplo, número de telefone e e-mail. Então, neste caso, você pode criar uma API que tem apenas esses campos. Então você pode selecionar não com menos, mas você pode dizer nome, telefone, e-mail. Então, você receberá apenas esses campos com esta solicitação desta API. Então vamos pegá-los. Só temos nome, e-mail e telefone. Isso é muito útil quando você quer, por exemplo, quando você tem uma lista de bico e, em seguida, esta grande lista, você quer reduzi-la. Então você deseja apenas selecionar um campo específico que você deseja usar no front-end. Vamos colocá-lo de volta para hash de senha. Então eu quero apenas excluir o hash senha e obter lista de usuários com todos os seus detalhes. 37. Faça o login uma API RESTo de usuários e como criar um Tokens: Nesta palestra, vamos ver como o usuário pode fazer login e usar as APIs. Então ele é obrigado a ter seu e-mail ou ID e senha e , em seguida, enviá-los de alguma forma com API para servidor de autenticação. E o servidor de autenticação irá responder com GW t, que é JSON Web Token, e dizer que o usuário é autenticado e é capaz de usar as APIs que são protegidas. Vamos começar a fazer a primeira parte. Então, precisamos criar um pedido de post onde a pessoa pode enviar seu nome de usuário e senha para o servidor. Então, vamos primeiro criar uma solicitação de postagem em nossa API de usuários. Então eu vou dizer roteador ponto post, e então o caminho será login. E então vamos salvar um método assíncrono, a solicitação e a resposta. E teremos a chamada de volta aqui. Vamos fazer o login por e-mail. Então vamos esperar em sua resposta pelo e-mail e senha. Então, primeiro, precisamos saber se esse usuário existe. Eu realmente tenho um usuário com este e-mail. Então, primeiro, vou criar constante, dar-lhe usuário. E este usuário terá um método de peso, exatamente como fizemos antes do usuário e encontrar um. Quero encontrar o usuário por e-mail. Então eu vou dizer aqui, encontrar um, e então será objeto. Posso atribuir o campo pelo qual quero pesquisar o usuário. Por exemplo, eu quero pesquisar por e-mail. Então, aqui vou dizer e-mail. E o e-mail virá do e-mail de ponto do corpo do pedido. Então aqui eu tenho o usuário já, que são enviados para olhar pelo e-mail. Então, se eu receber um usuário ou se eu não receber um usuário, eu enviarei erro. Então vamos fazer que o usuário de retorno ou status de ponto de resposta para 100 pontos final. E então diremos que o usuário não foi encontrado. Caso contrário, enviarei a resposta que o usuário foi encontrado. E será no objeto areia como usuário. Vamos tentar isso para ter certeza de que isso está funcionando. Então aqui eu preciso de um pedido de post, eu removo isso, e aqui teremos um login. E então não precisamos de tudo isso. Só precisamos do e-mail, como dissemos, e da senha do usuário. Então aqui eu vou ter senha. Por exemplo, digamos 1, 2, 3, 4, envie-o. E, em seguida, vamos obter este usuário realmente existe com este e-mail. Vamos cometer um erro no e-mail. Você faz dois, por exemplo, eu vou obter o usuário não encontrado. Então estamos no caminho certo agora. Então encontramos o usuário que queremos fazer login. Para fazer login em um usuário, precisamos comparar a senha que ele inseriu e com a senha que já existe no banco de dados. Mas já temos uma senha com hash. Então precisamos de alguma forma infeliz ou decodificar esta senha e, em seguida, compará-la com a senha que você enviou pelo usuário. E então eu digo, ok, você está certo, você está autenticado. Então, depois de ter certeza de que eu tenho um usuário no meu banco de dados com esse e-mail, eu quero verificar se há usuário que temos antes e descriptografar Com compare cantar, eu não posso comparar duas senhas com o hash. Então eu vou dizer que request dot body dot password, que é enviado pelo usuário e, em seguida, compará-lo com o usuário dot password hash, como o usuário, que eu encontrei com sua senha hash. Então, se essa compactação for bem-sucedida, eu direi, por exemplo, enviado para o backend ou para o front-end. Vamos dizer, por exemplo, status de ponto de resposta, por exemplo, para um usuário de envio de 100 pontos. Senão. Apagamos esta parte. E dizemos, por exemplo, com 400 e dizemos que a senha está errada. Vamos tentar isso. E aqui, por exemplo, eu tenho essa senha, nome de usuário. Eu diria que a senha está errada, mas você se lembra que temos a senha dessa maneira de um a seis e o usuário foi autenticado. Então, quando a senha está errada, temos a senha está errada. Então agora chegamos à parte importante. Então vimos antes que o servidor responderá com token web JSON. Então, de onde eu vou obter JSON web token no back-end. Em Node.JS, há uma biblioteca chamada JSON Web Token. Então precisamos instalar esta biblioteca. Então eu vou para a outra janela que eu tinha quatro para instalação, eu diria npm I. E então JSON Web Token. Instalar esta biblioteca me dará a capacidade de usar JSON Web Tokens. Então vamos tê-lo em nossas constantes ou importações podemos dizer, ok, AVT faculdade exigem JSON web token. Então eu posso usar essa variável agora ou constante para gerar o JSON Web Token. Como fazer isso? Então, quando o usuário é autenticado e tudo correr bem. Então eu vou dizer const token. E então eu usaria esta biblioteca JSON Web Token, esse sinal há um método lá. E este método aceitando o objeto, objeto com uma carga útil e segredo, que é chave secreta ou privada. Vamos falar sobre o segredo. Então este JVP, aquele sinal como vimos antes, está pedindo por objeto. E este objeto terá, por exemplo, você não pode passar nada. Posso dizer, por exemplo, ID de usuário. E o ID de usuário terá, por exemplo, ID de ponto de usuário, o usuário que eu tenho aqui, e com seu ID. Então aqui você pode passar os dados que você deseja com o token. Vamos ver como resolver o token no front-end. E também como podemos comparar o token na API de autenticação. E aqui no segundo parâmetro, precisamos passar um segredo. Secret é algo como, por exemplo, uma senha que é usada para criar seus tokens. Então pode ser qualquer corda. Por exemplo, vou dizer, por exemplo, cigarro. E depois disso há opções. E nessas opções, podemos adicionar algumas opções ao token, como a data de expiração, que veremos mais tarde. E em seu pedido de envio de succes, enviaremos o usuário com seu token. Então eu vou dizer enviar usuário e usuário, por exemplo, e-mail que enviar apenas o e-mail eo token. Então, desta forma, o usuário obterá o token no front-end e poderá usá-lo para acessar a API. Vamos tentar isso. Então eu vou para o Carteiro. Vou usar o login. Novamente, temos a senha errada. Vamos colocar a senha certa. E depois recebi o e-mail e uma ficha. Então este símbolo é criado pelo segredo que temos aqui. Então você pode fazer o que quiser. E este segredo, ninguém sabe sobre ele. Assim, ele não pode criar um token como com os mesmos tokens que são usados em sua loja virtual. Então, neste caso, nenhum usuário enviar com a API, por exemplo, qualquer token, e então ele terá a resposta, resposta certa porque ele não tem o Segredo. Vamos ver como resolver o token com o segredo que criamos para que o usuário possa obter a resposta certa. Então, se você se lembra, nós temos aqui as variáveis de ambiente. Então aqui podemos colocar o nosso segredo. Por exemplo, posso dizer aqui secreto. Meu cachorro é legal. Então eu digo aqui segredo. E vamos usá-lo aqui. Vamos dizer constante. E então digamos que segredo são variáveis de ambiente de ponto de processo, dot secret, que eu criei aqui. Então vamos passar esse segredo em vez da string codificada. Vamos verificar novamente para ter certeza de que tudo está funcionando bem. Então temos um novo médico. Assim, às vezes você vê que quando você está bloqueado em um site no dia seguinte, automaticamente você está desconectado. Isso acontece porque esse token expirou. Então o servidor tem algum tempo de expiração. Então, quando você tenta usar esse token, novamente, o servidor responderá a você, desculpe, esse token expirou. Como definir o tempo de expiração? O terceiro parâmetro desta sinusoide, tem opções. E essas opções podem ser uma delas. Por exemplo, expire em, expire em, você pode especificar um dia, uma semana, um mês. Eu quero um dia. Eu digo um d. Se eu quiser uma semana, eu digo 1 w. Então normalmente, Vamos olhar, por exemplo, para a nossa loja web, temos o token para um dia. Quando eu voltar depois de um dia para usar qualquer API e eu estou carregando o token expirado, então o servidor vai dizer, desculpe, você não pode usar esta API porque ela expirou. Vamos salvá-lo. E veremos na próxima palestra como proteger nossas APIs. Assim, o usuário não pode usar qualquer IPI somente se ele tiver um token. 38. Protegendo a API e autenticação em Middleware JWT: Vimos antes como o usuário agora tem o token. Agora ele pode usá-lo para acessar os dados ou nossas APIs, mas como podemos tornar nosso servidor protegido. Portanto, ninguém pode usar a API sem um token. Como vimos antes em nosso app.js, tínhamos um middleware. E o middleware está verificando tudo, indo para o servidor antes de ser executado. Então, aqui neste ponto, eu quero verificar se o usuário está autenticado ou não. A sequência. Para fazer isso, normalmente, eu crio no meu, por exemplo, eu quero criar alguma pasta auxiliar. E na pasta helpers, vou criar um novo arquivo, chamá-lo por exemplo, GBT dot js. E há e há uma biblioteca chamada Express JWT, que é usada normalmente para proteger as APIs em nosso servidor. Então vamos instalar esta biblioteca, MPM express JWT. E vamos pedir por isso. Então eu vou dizer constante JWT expresso. E então exigirá JWT expresso. E a função de proteção será a seguinte. Então eu vou criar uma função, chamá-lo de Autenticação ou nosso JWT. E este método retornará DWT expresso como uma função. E esta função, tem opções. Falamos antes sobre o segredo. O segredo é baseado em alguma string onde podemos criar nosso token. Então, quando alguém passar qualquer token para o nosso, por exemplo, backend, precisamos compará-lo com o cigarro. Então, se o token for gerado com base nesse segredo, ele terá acesso à API. Mas quando seu token baseado em segredo diferente, então a API não funcionará. E como você se lembra, nós importamos esse segredo ou colocamos nas variáveis de ambiente. Então aqui vou dizer segredo const novamente e, em seguida, processar o ponto do ambiente segredo. Outra opção que precisamos passar também é o algoritmo está gerando este token. Se formos para o site do JWT io, veremos que o token pode ser gerado com base em muitos algoritmos. Aqui estão os mais utilizados. Para o exemplo, estou usando HS 256, que também a biblioteca JSON Web Token está usando. Então podemos ter, por exemplo, algoritmos é matriz HS 256. Agora exploramos esse método com o módulo, então dizemos que as exportações de pontos do módulo é o nosso JWT. Então, desta forma, seremos capazes de usá-lo em nosso app.js. Então aqui eu vou dizer para cima, não usar o nosso JWT vindo de constante de DWT, que é necessário. Ajudantes JWT. Então o middleware é usado agora. Agora nosso servidor é protegido com base no token. Então, qualquer pedido que viremos, seremos solicitados autenticação JWT. E então nós vamos aqui ou expressar JWT onde ele virou para nós. Se for possível que o usuário possa usar esta API ou não com base em seu token. Então vamos verificar agora se nossa API está protegida ou não. Então eu vou pedir um get da lista de produtos. Eu vou aqui, eu envio esse pedido e então eu vejo esse erro não autorizado. Portanto, nenhum token de autorização foi encontrado. Express JWT retornou para mim este erro. Então eu preciso de alguma forma lidar com esse erro e enviado para o usuário que precisava de dados. Mas primeiro, como podemos adicionar um token ao pedido. Normalmente adicionar um token com uma solicitação vem com autorização no Postman. E também no front-end, você precisa usar, por exemplo, um token de portador. E o símbolo do portador. Vamos precisar passar o token que você obteve após o login com o usuário. Existem diferentes tipos de autenticação que usaremos aqui, a maior. Então, antes tivemos também aqui o token depois que fechamos com um usuário Thomas. E aqui vamos passar este símbolo. Então, a autorização aqui vindo para esta API carregada com este token. Então, depois que eu enviar o pedido, eu vou chegar lá i dados. Se eu remover essa ficha, não farei isso. Eu não tenho qualquer autorização na frente e vamos ver como carregar token sobre a solicitação nos cabeçalhos. Então agora temos certeza de que nosso token está funcionando. Então vamos fazer uma mudança aqui. Erro de cometer. Veremos que no erro autorizado, token inválido. Então, temos erros diferentes aqui. Então precisamos lidar com esse erro de alguma forma. Veremos isso na próxima palestra. 39. Manipulação de erros de autenticação: Vimos anteriormente que temos alguns erros em nossa API. Então, precisamos lidar com esses erros para ser exibido forma mais bonita para o usuário ou o front-end. Erro de manipulação no RGS pode ser feito simplesmente desta maneira. Vamos para o middleware e dizemos AP US. E criamos uma função que contém erro como uma resposta de solicitação de retorno de chamada. E em seguida, neste caso, esse método será executado toda vez que houver um erro em nossa API. Então, aqui você pode verificar se há erro. Então você pode ascender, por exemplo, response.status. Como, por exemplo, digamos 500 e o JSON. E neste JSON EUA, por exemplo, uma mensagem e esta mensagem dizendo erro no servidor. Portanto, qualquer erro pode acontecer no backend será chamado com esta mensagem. Vamos tentar isso com o erro que obtivemos com a autorização. Então eu vou cometer um erro aqui neste símbolo. Então vamos ver aqui que temos erro no servidor porque temos um problema no token, mas não sabemos qual é o erro exatamente. Então, podemos classificar esses erros com base no tipo. Porque se nós imprimir este erro de alguma forma, digamos que em vez da mensagem, o sprint, este erro, um erro aqui e, em seguida, tentar, vamos ver que o erro tem um nome. Baseado no nome. Talvez eu possa classificar os erros ou podemos mantê-lo assim. Cabe a você, mas podemos torná-lo mais bonito da maneira atual. Mas primeiro, para ter um app.js limpo, Vamos mover este método para os nossos ajudantes. Então vamos criar arquivo aqui, chamá-lo manipulador de erros para JS. E nós criamos uma função, chamá-lo de manipulador de erros. E terá os mesmos parâmetros, erro, solicitação, resposta e próximo. E então podemos lidar com o que temos aqui. Então podemos pegar isso se colar aqui. E desta forma, podemos manter J o mais limpo possível. Então aqui temos que dizer manipulador de erros. E manipulador de erros é constante. Erro e aprendizado é necessário dos auxiliares e manipulador de erros. Assim, com base no tipo ou no nome do erro, podemos classificar nossos erros. Por exemplo, digamos que se o nome do ponto de erro, vimos anteriormente que temos um nome, um erro autorizado. Então eu retornarei aqui status 401, e o erro será como uma mensagem. Podemos dizer que a mensagem é, por exemplo, o usuário não é. Como veremos também no futuro, teremos tipo de erros que é chamado de erro de validação. Veremos isso mais tarde, quando vamos fazer upload de fotos. Ou dizemos que o nome do ponto de erro será, por exemplo, erro de validação. Então a resposta será a mesma que esta. Mas, por exemplo, vamos ser suficientes. Agora apenas com o erro, vamos mudar esta mensagem quando vamos fazer o upload das imagens e dos arquivos. E para erros gerais, é melhor lidar com isso também. Então nós temos aqui retornado status ponto resposta. E quando há algum general, podemos dizer que é um erro do servidor, então é 500. E, em seguida, no JSON, eu envio a mensagem como erro. Ou você pode enviar o erro diretamente sem uma mensagem. Aqui, vamos nos preparar para voltar e voltar aqui também. Portanto, agora temos um manipulador de erros para nossa autorização e validação. Agora na frente, quando eu fizer uma sincronização não autorizada. Então, quando eu pedir uma API sem qualquer token, então eu obterei esse erro. E se eu fizer, Por exemplo, Eu carrego um PDF e eu não tenho permissão para carregar um PDF para o nosso Thurber, então eu vou obter o erro de validação. E também se não houver erro classificado aqui, então teremos o erro em geral como uma mensagem no JSON. É bom ter alguns comentários sempre no código. Então você pode jogar alguns comentários para explicar que tipo de erro é este. 40. Excluindo as rotas de API REST de autenticação: Bem-vindo de volta. Agora temos uma API totalmente segura, então ninguém pode usá-la sem autenticação. Então, neste caso, o usuário, quando ele queria olhar, ele deve ser autorizado. Então isso não é lógico para nós. Assim, o usuário pode ser capaz de usar um login para obter um token. Então, neste caso, precisamos excluir de alguma forma esta API de ser autenticada. Então aqui no Express JWT, eu não posso dizer a menos que. E neste, a menos que eu tenha objeto onde eu possa localizar empático é todas as APIs que eu quero excluir. Por exemplo, vamos excluir o login. Faça isso. Preciso especificar todas as APIs que eu quero que elas sejam excluídas. Então eu posso dizer aqui, barra api, v1 barra usuários e login. Então eu quero que este seja executado. Vamos tentar que agora é o Carteiro. E ainda não estamos autorizados. Isso é porque eu preciso adicionar outra barra aqui. Então vamos de novo ao Carteiro. Tentamos e temos o token novamente. Então você tem que ter cuidado para ter a barra aqui. Então, também podemos adicionar o registro. Eu já acrescentei que apenas a API, que é exatamente como o post. Então aqui nos usuários, eu tenho o registro de postagem, que é exatamente o mesmo que post. Assim, o usuário também pode registrar uma conta na loja virtual. E aqui é usado para o administrador que deseja remover ou adicionar usuários. E quanto aos produtos? Produtos Além disso, eu preciso de alguma forma obter o produto gratuitamente sem autenticação. Portanto, não preciso que o usuário seja autenticado para obter o produto, porque não quero que as pessoas façam login. Então eles podem ver minha loja na internet. Preciso deles para obter a lista de produtos sem qualquer autenticação. Então, como podemos fazer isso, precisamos especificar o método, o método HTTP. Então eu posso dizer imprimir apenas que pedidos GET, mas não permitir post. Caso contrário, as pessoas poderão publicar produtos na minha loja web. Então, para fazer isso, este método caminho aceitando Um objeto e este objeto tem um primeiro campo como uma URL. E o segundo campo é os métodos. E URL, eu posso especificar o URL como temos aqui. Mas em vez disso, usarei produtos. E os métodos serão obtidos, por exemplo, e opções. E isso será um array. Então vemos aqui nós especificamos a URL da API, e então nós especificamos os métodos. Vamos tentar isso. Eu vou aqui para obter a lista de produtos. Sem autenticação. Funciona perfeitamente. E quando eu remover isso, não vai funcionar. Então, é melhor tê-lo assim para o usuário possa obter a lista de produtos no front-end. Refatorei aqui o código, para que fique mais bonito. Então aqui temos a variável API, que é obtê-lo a partir da variável de ambiente. E aqui estou eu usando contractores para injetar a variável dentro da força. Mas agora temos um problema. Você se lembra? Nós tínhamos antes nas APIs para produtos, nós criamos métodos como, por exemplo, obter destaque e obter destaque. Nós também precisávamos ser públicos porque eu quero mostrar o produto de recursos no meu front-end sem autenticação do usuário. Então aqui, se eu quiser experimentá-lo, eu vou para o Postman postado aqui e eu digo três produtos em destaque. Não serei autorizado. Neste caso, precisamos especificar também este URL aqui. Mas então teremos uma lista muito longa de APIs, especialmente no momento em que temos loja web muito grande. Porque precisamos de muitas APIs. Não só dizendo, por exemplo, me dê o produto de recurso ou me dê a contagem de produtos. Então, a coisa boa aqui que eu posso usar string STD assim, eu posso usar expressões regulares. Expressões regulares estão me dando a capacidade especificar tudo após os produtos, por exemplo. Então aqui com esta corda, eu posso ser capaz de usar esta. Então, porque aqui temos eu tenho esta estrela. Então, qualquer coisa após os produtos funcionarem. Então agora depois que eu construí meus rejeitos, então aqui eu digo API barra, v1 barra produtos. Aqui está escapando Slash. Por isso, não entrará em conflito com a barra que temos de definir. Este assunto é sobre expressões regulares. Então você precisa saber mais sobre essas expressões regulares. Estou usando sempre rejeita testador, que está sempre localizado online. Esse é um lindo site chamado Regex 101. E aqui você pode testar suas expressões regulares. Então aqui eu vou pegar este e experimentá-lo naquele site. Então eu digo aqui, algo assim será permitido, mas se eu cometi um erro aqui, então não será permitido. Então é exatamente essa fórmula. Então, aqui é melhor usar sempre expressões regulares para especificar mais as APIs e ter menos código. Então vamos tentar agora. E nós temos nossos produtos em destaque. Vamos fazer também a mesma coisa, quatro categorias. Então temos aqui 1 e categorias. Para que possamos pegá-los. E, por exemplo, não podemos comer ou postar. Então, no futuro, quando eu adicionar mais APIs, precisamos adicionar algumas exclusões aqui, sempre nesta matriz de caminhos. 41. Adicione mais informações de usuários secretos ao Token: Vimos antes quando tivemos um login que não podemos especificar alguns dados dentro dessa resposta ou dentro do token. Neste caso, eu também posso passar alguns dados secretos, que eu quero ser só vem com o token. Então, se o usuário não tiver essa informação no token, eu não permitirei que ele faça algo. Uma das informações secretas que posso passar aqui é a administração. Então é admin, eu posso dizer que este usuário é admin na loja virtual ou não. Então, neste caso, posso permitir que ele olhe para o painel de administração da loja web ou não. Então, o usuário normal não pode fazer login, mas o administrador, que tem admin, true, ele continuou procurando. E, claro, neste caso, é melhor separar as tabelas. Assim, eu posso ter usuários e clientes, por exemplo, ou usuários e administradores. Então, isso veremos na próxima palestra com mais detalhes. Agora temos o usuário e, em seguida, vou verificar o usuário é admin. Então, neste campo, neste token, eu posso enviar o usuário se ele é admin ou não. Talvez você me diga por que você não pode fazer isso no front-end, como verificar se o usuário é admin ou não. Neste caso, o usuário poderá, por exemplo, algum hacker que tenha experiência em programação, ele poderá do front-end ao login no painel de administração. Nem ele tem essa habilidade. Ele pode apenas criar um dados falsos que ele é administrador. E então ele pode colocar como no JSON é admin é verdade. E então ele pode olhar. E este caso, não é bom em nossa loja virtual, então é melhor tê-lo seguro aqui. Então, se o usuário não tem que eu token, que tem é admin, então ele não será capaz de olhar para o painel de administração. Vamos tentar isso e ver o nosso token se ele for validado, certo, eu vou para o Postman e pressione Enviar. Isso é bom. Agora temos o símbolo. Então nós verificamos este token em DWT dot io. Vá aqui, experimente. Eu vou dizer também este admin e tempo de expiração. Então, neste caso, a pessoa não pode construir um símbolo como esse porque não tem, ele não tem o segredo. E se você se lembrar, sempre a API está verificando esse token. Se foi construído com aquele cigarro, que especificamos no nosso back-end. 42. Usuários e administradores: Como vimos antes, excluímos algumas solicitações de API para não serem autenticadas. Por exemplo, aqui os produtos como Git e opções não devem ser autenticados porque eles estarão em público. Assim, qualquer usuário público pode navegar pelos produtos na minha loja virtual. Assim, o usuário de login que trancou no e-shop, ele pode postar produtos ou atualizar para produtos, produtos elite. Mas no nosso caso agora os usuários, nossos clientes. Então, se eu sou cliente e fiz login no problema, então, neste caso, poderei excluir produtos. E nos primeiros segundos que publicar este site online, ele será destruído. Se você se lembrar, criamos no modelo um campo que diz é admin. Então, aqui nós especificamos o usuário se ele é admin ou não. Em nosso E-sharp, teremos também painel de administração. E este painel de administração não é permitido para usuários normais inserirem apenas os administradores. Então temos aqui na tabela de usuários, algumas funções de usuário. Temos um cliente e temos admin, e ambos estão na tabela de usuários. Você tem liberdade aqui para fazer, por exemplo, tabelas separadas neste caso. Mas aqui eu queria mencionar as funções de usuário. Então você também pode torná-los na mesma tabela, mas com diferentes funções. Há muitas maneiras de fazer funções de usuário em Node.JS, mas eu estou indo com a maneira mais simples que precisamos para nossa loja virtual. Se você se lembrar, depois que o usuário obteve o login no aplicativo, ele recebeu um token. E esse token está sobrecarregado com o ID do usuário e é admin. E aqui sabemos dentro do token se o usuário é admin ou não. E quando o usuário envia uma solicitação, a biblioteca JWT está desmontando esse token com o código secreto que é fornecido em nossa API ou em nosso servidor. E ele vai ver que se ele é realmente gerado a partir deste servidor ou não. Então, podemos identificar o usuário se ele tem token da nossa loja virtual ou não. Até agora tudo está bom. Então vamos supor que eu tenho um símbolo certo. E eu também quero olhar para o meu trabalho como administrador. Deixando assim ele vai nos manter não seguros porque o usuário, neste caso, é capaz de excluir ou adicionar produtos. Assim, o JWT expresso tem um ótimo método que está revisando, por exemplo, ou revogando o token sob algumas condições específicas. Para fazer isso, há um campo é revogado, e isso é revogado é uma função. Então, também podemos, no retorno de chamada, podemos especificar se o usuário é admin ou não. Então eu crio aqui, por exemplo, outro método é revogado. E isso é revogado será uma função, função assíncrona. E terá pedido, carga útil. E Don. Quais são esses parâmetros? Solicitação é quando eu quero usar os parâmetros de solicitação ou o corpo da solicitação, Eu quero saber algo que está enviando o usuário. A carga útil contém os dados que estão dentro do token. Por exemplo, eu quero obter é admin do token que está assinado para o usuário. E este usuário está enviando para mim com os cabeçalhos de solicitação. Então aqui, neste caso, eu posso dizer se não payload dot é admin. Porque agora eu tenho acesso a isso, é admin para a carga desse token. Então eu retornarei que feito é nulo e verdadeiro. Então, neste caso, estamos dizendo que rejeitar o token. Então, se qualquer API autorizada chamada e nosso usuário não é admin, então ele será rejeitado. E então, se ele é administrador, podemos dizer feito sem quaisquer parâmetros. Como dissemos antes, temos apenas dois tipos de usuários em nossa edição. Então, temos administrador e usuários. Se você tem mais papéis, você pode ouvir, classificá-los. E aqui você define o que está em evocado ou o que é permitido. Agora, vamos tentar isso com o carteiro. Se você se lembra, temos um usuário aqui, Thomas Jackson, que ele não é administrador na loja. E estes são os dados dele. Então vemos aqui que é admin é falso. E quando eu tentei postar um produto em nossa API e novo produto, eu vou obter o usuário não está autorizado. Vamos alterar o token para estar com o admin através. Bem, vamos ao banco de dados manualmente e mudar esse usuário para ser um administrador. Então eu vou dizer aqui admin através e, em seguida, eu clique em atualizar. Se eu tentar agora usar o envio, eu também vou ficar não autorizado. Por quê? Porque eu estou usando o token que é carregado com é admin false. Então precisamos olhar de novo para obter uma nova ficha. Então eu vou para a API de login, eu tenho o usuário e a senha. Se eu enviar esse pedido, tenho uma nova ficha. E vamos usá-lo em nossos pedidos de postagem. Na autorização. Eu jogo, substituo aqui e tente novamente. E é postado com sucesso o produto graças a expressar JWT que ele tem este método. Então foi capaz e nos fez capaz de fazer, por exemplo, essa função de usuário. Agora nosso aplicativo é totalmente seguro e ninguém pode usá-lo ou acessá-lo sem qualquer autorização ou qualquer função de administrador. 43. Obter a API de conta de usuários: Às vezes, o administrador do workshop quer saber quantos usuários ou clientes ele tem em sua oficina. Então, neste caso, ele precisa de uma API para obter a contagem de usuários. Fizemos isso anteriormente com os produtos. Tivemos uma API, especialmente para obter quantos produtos temos em nossa edição. Então vamos copiá-lo e ir para a API do usuário. Após o login e o registro, podemos usá-lo aqui. E dizemos o mesmo GetCount, mas usuário. E aqui dizemos contagem de usuários. Se nenhum usuário contar, em seguida, retornar 500 e, em seguida, o seu retorno para mim contagem de usuários. Então vamos salvar tentou o carteiro dele. Vamos, por exemplo, aqui, eu digo usuários e obter contagem. Experimente. Temos um erro porque eu estou fazendo um post. Precisamos fazer um GET. Tentamos de novo. Temos contagem de usuários para, temos realmente quatro usuários. Nós também não fizemos uma solicitação de exclusão. Então, vamos também copiá-lo de, por exemplo, as categorias ou produtos. Podemos fazer a partir daqui e pegar este. E então nós colocamos um pedido de exclusão e eu substituo usuário, usuário. E todo o resto é usuário. Então, como você vê aqui, é exatamente da mesma maneira que fizemos com os produtos. Nós o salvamos, e agora estamos totalmente feitos com os usuários. Estou tão feliz que você terminar este módulo e você verá o código onde chegamos na pasta de recursos. Então você pode baixá-lo e, em seguida, tentar coisas, mudar coisas, tentar sozinho e tentar comparar seu código com o código que eu enviei. 44. Ordens: Bem-vindo a uma nova seção. Nesta seção está relacionada totalmente com as ordens. Então criamos seus produtos e também os usuários. E agora vamos construir as ordens. Como cada e-shop, o usuário vai ter um preenchido seu cartão e, em seguida, ele vai check-out para enviar um pedido. Este pedido virá com o endereço da pessoa e também as opções de envio e como ele vai pagar este pedido. E veremos também depois que o usuário entrar, como obteríamos também os dados do usuário e preencher os dados do pedido automaticamente. Então, sem deixar o usuário sentir o endereço de cobrança novamente. Então vamos deixar os dados vem das informações do usuário que criamos antes. E também nesta seção, veremos como vincular o produto ao pedido. Então vamos ver que a ordem contém muitos produtos. Então, às vezes eu adiciono, por exemplo, camisetas e calças. Então vamos ver como vincular a ordem com os produtos. E no back-end ou no back-office onde o administrador pode fazer login e controlar os pedidos. Vamos ver como seremos capazes de alterar o estado da ordem. Por isso, será entregue ou, por exemplo, enviado, ou mesmo está em espera ou cancelado. Então aqui tudo será relacionado totalmente com o backend. Não vamos trabalhar na frente. Então vamos trabalhar com o Carteiro. aluno pode entender como esse backend funciona isolado do front-end. Espero que você goste desta seção. Esta seção, como eu disse, não está repetindo as seções anteriores. Não tem coisas novas. Como vamos vincular os produtos como matriz de itens de ordem e também vinculá-lo para o pedido fica pronto. E vamos começar. 45. Modelo e esquema de pedidos: Bem-vinda de volta. Agora vamos implementar o esquema de ordem e esquema de itens de ordem. Anteriormente, implementamos o banco de dados ou planejamos o banco de dados com base no que precisamos para o e-shop. Como você vê à direita da tela, já temos a tabela de pedidos e itens de ordem. Como no banco de dados relacional, vemos a conexão entre os itens de ordem e ordem. Vamos começar primeiro com pedidos, como vimos antes, com os produtos e a relação com as categorias. Nós também tinha implementado que a categoria tem um tipo de ID de objeto e a referência é a tabela de categoria. Então vamos fazer o mesmo entre o pedido e o item do pedido. Então vou copiar esta parte. Eu vou para o pedido e eu vou colocar aqui itens de ordem. E aqui vamos ter o ID do objeto e a tabela de item do pedido e obrigatório sim, através. Mas a diferença aqui que temos talvez vários itens de pedido, não apenas um. Então, em Mangusto podemos implementar isso alinhando isso dentro de uma matriz. Então, neste caso, precisamos passar ou ter a matriz de itens de ordem de IDs de itens de ordem que estão existentes no banco de dados. Então, neste caso, precisamos criar tabela de itens de ordem. Então vamos ter um arquivo aqui. Chame de item de ordem ponto js. E terá o mesmo esquema, Mangusto toda essa informação. A coisa aqui vamos ter item e aqui estão os itens que não temos isso. Teremos quantidade, que é o número do tipo. E é necessário. Sim, é verdade. E como vemos também que temos um produto. Portanto, precisamos vincular este item de pedido ao produto. Então eu vou dizer aqui que eu vou ter ID ou tipo de ID de objeto. Tipos de esquema de mangusto que ID de objeto. E que é referência deste item pedido será produto. E vamos exportar como item do pedido e tê-lo como item do pedido. E aqui temos ordenado esquema de item. Então, nosso item de pedido está pronto, que importamos aqui. E nós referenciamos com ID de objeto na tabela de ordem. Então, a coisa aqui que temos muitas relações. Portanto, o pedido está relacionado a todos os outros itens e item do pedido está relacionado ou se refere ao produto. Então, na minha aplicação, quando eu pedir um pedido, eu vou obter todos os outros itens, incluindo seus produtos e preencher esses produtos. Por exemplo, eu preciso do nome e da categoria também. Aqui eu adicionei rapidamente os outros campos que precisamos, o endereço de entrega, 12, cidade, CEP, país, status do telefone, que vamos dizer que um valor padrão anexando. Então, quando a pessoa enviar um pedido, então o valor padrão ou o primeiro estado da ordem estará pendente. E aqui temos também o preço total. Como vamos ver que nós iria calculá-lo internamente quando criamos a ordem. E aqui, outra referência com ID de objeto para a tabela de usuário. Sabemos qual usuário ou sua desordem e a data ordenada então aqui, que o usuário não tem que enviá-lo para o back-end. Ele será criado automaticamente com o ponto agora. Assim, ele irá criar a hora em que o pedido de postagem é enviado. E como você se lembra antes, tínhamos aqui uma identificação virtual. Então, para não ter este ID sublinhado, podemos ter também ID normal. Vamos copiá-lo também e tê-lo da mesma maneira. Então, aqui eu disse esquema de ordem, criar para mim um campo ID virtual em vez de ID sublinhado. Então agora estamos prontos para trabalhar com essas tabelas. Por exemplo, aqui temos ordem e item de ordem, modo que a relação é alcançada entre essas duas tabelas. E agora estamos prontos para criar nossa API com pedidos. 46. Organize um exemplo de referência de ordem de pedidos a produtos: Assim, a ordem é vinculada aos itens da ordem por matriz. Então vamos ver e ler exemplo como o front-end irá enviar esses dados para o back-end que eu criei aqui e objeto de, por exemplo, como o usuário irá enviar os dados para o back-end. Então, primeiro de tudo, vamos imaginar que o usuário tem um carrinho e ele selecionou dois produtos, produto 1 e produto 2. E eles têm identidades diferentes. Então, itens de ordem será matriz de dois produtos, e cada produto terá uma quantidade. Então, desta forma, eu tenho uma matriz de item de pedido ou seu item tem uma quantidade eo produto. E o resto será o mesmo. Exceto aqui, veremos que o usuário enviará o nome de usuário, mas enviamos o ID do usuário criando o pedido. A mesma coisa aqui. Não enviamos o nome do produto, mas enviamos o ID do produto. Então é assim que o ID do produto é vinculado ao item do pedido e como os itens do pedido são vinculados ao pedido. 47. Novo pedido e crie itens de pedido no poste em nova ordem: Colocar um pedido em nosso banco de dados dados necessários do usuário. Como vimos antes, temos esses dados JSON onde eles usuário depois de fazer o checkout, ele vai colocar o pedido em nosso banco de dados. Então, o que precisamos primeiro para criar uma solicitação de post em pedidos API, já temos uma solicitação GET. Precisamos criar agora uma solicitação de post para não repetir o mesmo processo que fizemos antes. Vamos copiar a solicitação de postagem mais simples que criamos em categorias. E nós vamos aqui duas categorias, postar pedido e copiá-lo, e colá-lo em nossos pedidos. Então, o que é exigido de nós, precisamos criar um modelo de ordem e os campos da ordem que éramos, tínhamos antes e criamos o esquema. Então vamos assumir o caso mais simples, pois o usuário enviará esses dados. Então aqui nós pegamos os dados. Eu colá-los rapidamente para não repetir o mesmo processo. Então nós temos do usuário os itens do pedido todos vem com o corpo da solicitação, que é este aqui. Então temos todos os outros itens e todos os dados que são enviados pelo usuário a partir do front-end. Vamos consertar isso aqui. Estou ensinando desse jeito como chamá-lo rápido, então não temos que escrever novamente tudo sobre a ordem porque, você sabe, temos sempre post request, temos sempre delete request. Portanto, é melhor copiá-lo da solicitação básica e alterar, por exemplo, as coisas de nome para caber em nossa nova API. Então aqui temos encomendado tudo agora ordem e enviado de volta a ordem criada. Mas se você se lembrar, criamos a tabela de itens de ordem. Assim, o usuário não sabe no front-end que os itens de ordem que são armazenados no banco de dados. Então aqui você vai apenas enviar esses dados. Ele quer três vezes deste produto e duas vezes deste produto. Mas para buscar esses dados e armazená-los para o administrador, isso será como, por exemplo, um obstáculo, um pequeno obstáculo para obtê-los novamente do banco de dados. Mas vamos resolver isso com Mangusto durante esta relação entre ordem e itens de ordem. Então, quando o usuário ou o pedido de post é enviado ou criado, temos que criar os itens de ordem primeiro em seu banco de dados e , em seguida, anexá-los ou relacioná-los com o pedido de ordem que temos aqui. E como vimos anteriormente, que itens de ordem, é uma matriz de IDs da tabela de itens de ordem. Então, neste caso, precisamos de matriz de IDs, IDs que estão no banco de dados desses nossos itens de ordem. Então, primeiro, precisamos criar essas identidades ou como Mangusto as criará para mim. E então eu vou guardá-los com a ordem ou relacioná-los com essa ordem. Então, aqui, não vamos obter do usuário diretamente o item do pedido que está contendo o produto ea quantidade sabe, precisamos apenas matriz de IDs. Então, podemos dizer IDs de itens de ordem. E esses IDs de item de pedido virão de nossos itens de pedido criados no banco de dados, que faremos aqui. Então nós temos este constante const ID item ordem, que vamos obtê-los a partir de após a criação do item de ordem no banco de dados. Então, precisamos de alguma forma primeiro dois loop dentro dos itens de ordem que são enviados do usuário. Então eu vou dizer pedido corpo ponto, ponto itens de ordem para loop sempre usamos mapa porque sabemos que o usuário vai enviar matriz, matriz de itens de ordem. E aqui teremos ou seu item, um item de pedido. E, em seguida, dentro deste item de pedido, criamos deixar novo item de pedido, novo modelo de item de pedido. Então ordenou o modelo do item. Precisamos de o ter a partir dos nossos modelos ou do seu item. É exatamente como estamos criando uma nova categoria ou um novo produto, ou é como uma solicitação de postagem. Então eu digo aqui, ou o item, quais são os campos no item do pedido? Temos quantidade e um produto. Então eu vou aqui, eu digo quantidade. Então, já temos um item de pedido da lista dos itens de ordem que eles usuários. E assim eu digo aqui, pedido item quantidade ponto e também produto, que irá conter o ID do produto. Então, a partir do item de encomenda ponto-produto, então precisamos salvar este item no banco de dados. Então eu digo deixar ou o novo item de ordem, a mesma variável que podemos usá-lo. Aguarde um novo item de pedido que criamos anteriormente ou o modelo, e não é seguro. Então, aqui estamos salvando o item do pedido no banco de dados. Então, quando nós loop em itens de ordem, então para cada item de pedido, eu vou salvá-lo no banco de dados. Mas eu quero que este mapa me devolva apenas as identidades. Então aqui eu digo devolver não o novo item do pedido, mas o novo ID do ponto do item do pedido. Então, neste caso, vamos obter apenas os IDs em uma matriz. Então criamos os IDs do pedido e os anexamos ao pedido, e vamos salvar o pedido. Não vamos salvá-lo agora no banco de dados, vamos apenas enviar a ordem é criada ou o modelo de ordem para o front-end para o usuário depois que ele postar solicitação. Então vamos tentar isso com o Carteiro. Eu vou ao carteiro e substituo isso por pedidos baseados em nossa API, como nós criamos. E então eu vou colocar aqui os dados. Vamos primeiro rever o token de autenticação e, em seguida, o corpo, o que temos este JSON por exemplo, eu já estou recebendo esses IDs de nosso banco de dados. Portanto, devemos ter esses IDs no banco de dados já. Vamos enviar o pedido de correio. Vemos que recebemos um erro. O erro vem, Vamos ver no console do nosso servidor de teste ou do nosso servidor, vamos ver que temos aqui um peso. Isso é porque temos aqui um peso, mas isso requer uma função assíncrona. Quero dizer, aqui. Então aqui temos um peso e isso requer uma função assíncrona. Então, neste caso, não podemos esperar dentro de uma função normal. Precisamos colocar uma função assíncrona basicamente é esta. Então eu diria aqui assíncrono e salvar e tentar novamente. E veremos que a solicitação é criada ou a ordem é resfriada recriada, mas os itens do pedido estão vazios. Vamos rastrear esses itens de pedido para ver por que eles não são criados. Para rastreá-los. Podemos fazer o log do console de pedidos, itens, IDs. E vamos ver no console o que ele vai devolver para nós. Então aqui eu salvei. E então vamos tentar de novo. Vamos checar o console. Veremos que voltamos às promessas. Então, não estamos devolvendo realmente o ID, estamos retornando uma promessa. Isto porque temos aqui função assíncrona e esperar, e estamos retornando com esperar uma promessa. Então, de alguma forma, precisamos resolver essas promessas. Como o usuário está enviando uma matriz de itens de pedido, não apenas um. Por isso, temos de combinar essas promessas. Então aqui temos uma série de promessas para combiná-las, eu uso o promise dot all. Então, neste caso, eu terei uma promessa de retorno ou uma promessa, que será resolvida depois disso aqui, antes de criarmos a ordem. Então vamos tentar consolidar. Novamente. Vemos que temos uma promessa, não promessas como antes. Então precisamos resolver essa promessa. Como podemos resolvê-lo, podemos criar uma nova constante. Chame-o ID do pedido é apenas ou itens do pedido. Ids, por exemplo, resolvidos. Porque isto é uma promessa. Então eu posso dizer aqui, uh, esperar que isso seja resolvido e depois imprima para mim. E, em seguida, substituo esse ID de itens de pedido pelos IDs de itens de pedido resolvidos. Vamos tentar de novo. Isso é ótimo. Chegamos a eles de novo. E no log do console, temos os dois IDs que são criados de nossos itens de pedido. Vamos verificar isso no banco de dados. Depois de fazer login, vejo aqui a tabela de itens de ordem é criada. Eu não criei que eles livro atlas é muito inteligente. Então, com base no modelo que eu criei no meu banco de dados ou no meu código, ele está criando a tabela para mim. Então aqui se eu ir para itens de ordem, eu vou ver para encomendar itens que são criados com base no carteiro e eles têm o mesmo ID que estão no banco de dados. Então agora estamos prontos para criar nossa ordem. Então aqui não temos nada, então não temos mesa de pedidos. Isso é porque comentamos esse salvamento. Então, aqui, depois que o pedido for criado ou salvo, então eu o reenviarei de volta. Vamos remover este registo de consola para não ter o nosso registo cheio de dados desnecessários. Então aqui eu vou agora para o carteiro. Faça um pedido. Ótima. Agora criamos um pedido, e temos aqui, o novo ID é criado do pedido. Então, se eu for ao Atlas de novo, eu me refrescarei. E vamos ver que a tabela ordens é criada automaticamente porque temos modelo de ordem. Então o que eu pedi ao Mangusto para criar para mim este modelo de ordem, então ele criou a tabela. Então aqui temos outros itens, ID do objeto dos novos itens de ordem que são criados novamente aqui. Então, toda vez que eu faço o pedido, eu crio um novo item de pedido. Na próxima palestra, vamos ver como obter itens de ordem ou a ordem em si maneira mais detalhada. Então, não obteremos apenas IDs, vamos ficar mais detalhados. Vamos ver o item do pedido, o que ele contém, e também tudo. Por exemplo, qual usuário o criou, não apenas IDs. 48. Obtenha detalhes do pedido e povoe produtos em itens de pedido e dados do usuário: Ok, agora vamos obter uma lista de pedidos, já que agora temos uma ordem no banco de dados. Nós já criamos uma solicitação GET para uma lista de pedidos. Então vamos tentar agora com um carteiro. Eu vou aqui, criar o mesmo que pedido de post, mas será um GET e a autorização porque sempre quando eu criar uma nova API, eu devo tê-lo autenticado. Ou excluímos essa API da autenticação como vimos anteriormente. Então agora eu vou usar este token get lista ratos, temos lista de ordens. Então, agora temos apenas uma ordem no banco de dados. E estamos obtendo-o com a solicitação GET porque é uma matriz. Vamos preencher o usuário para que possamos ver os detalhes do usuário dentro desta solicitação. Porque, por exemplo, eu quero ver no painel de administração, na tabela de pedidos, eu quero ver os usuários que os encomendaram. Então, aqui vamos nós no código e dizemos apenas “dot populate”. O que preencher o usuário. Salvar. Tente de novo com o Carteiro. Agora temos os detalhes do usuário, todos os detalhes dele. Mas para mim como usuário ou administrador, não preciso de todas as informações do usuário. Então eu só quero, por exemplo, o nome dele. Para fazer isso. Acabamos de colocar após a população do usuário, colocamos os campos que queremos preencher. Então tudo o que eu tenho, por exemplo, o nome e no Carteiro, quando eu enviar esse pedido, eu recebo apenas o nome. Vamos postar outra ordem com dados diferentes. Por exemplo, vou dizer aqui em vez de país, República Checa, Vou colocar EUA. Então aqui eu vou lá e digo, eu não uso um e um número diferente. Exemplo, 1, 2, 3, 4, 5, 7. Então aqui vou postar outro pedido ou outra ordem. Então, neste caso, eu vou chegar lá pelo menos dois pedidos. Assim, também podemos classificar os pedidos por data. Então, porque já temos essa data ordenada campo, então temos a data aqui pelo ponto. Agora, nós também podemos classificar isso por data. Para fazer isso, É muito simples. Eu só vou aqui e depois da população do usuário, Eu digo classificar com base na data da coluna ordenada. Então aqui temos, você se lembra de uma data encomendada. E com base nessa coluna, eu quero classificar minha saída. Então vamos aqui, Carteiro, tentamos pegar a lista de novo, e vemos que os temos ordenados por data. Como você vê, o pedido aqui é do mais antigo para o mais novo. Então nós temos anteriormente este em 23 de dezembro neste momento. E agora temos este. Para que possamos encomendar do mais novo para o mais antigo. E eu acho que isso interessa ao usuário para fazê-lo. Nós apenas alinhar isso em um objeto e, em seguida, dizer que este objeto é igual a menos um. Então, quando eu digo no método de classificação, neste caso, então isso significa que ordená-los do mais novo para o mais antigo. Então, se eu atualizar e ir para o Postman imediatamente, e veremos que temos o mais novo 1 primeiro e depois o mais velho. Você pode verificar a documentação do método de classificação. Ele tem um monte de características. Assim, você pode usá-los para classificar suas saídas com base em algum campo específico ou em alguma ordem específica. Vamos agora obter um detalhe de solicitação ou um detalhe de pedido. Então a mesma coisa está aqui. Eu postar ou eu recebo este pedido colado aqui. E então, em vez de ter o tipo e a população, temos encontrar por ID. E aqui nós especificamos o ID. E a identificação será pedir pontos params. Porque seus parâmetros tomaram ID. E nós fomos renomeados isso para ordem apenas em vez de lista ordenada. Aqui temos ordem, ordem, ordem. Vou agora para a frente e recebo, por exemplo, este. Depois disso, eu coloquei esse ID do pedido e envio esse pedido. E eu vou obter apenas esta ordem com população do usuário. Chegamos agora ao ponto importante. Temos aqui, os itens do pedido apenas como IDs. Queremos ver os produtos estão dentro desses itens e a quantidade que, vamos limpar o nosso código um pouco. Então nós temos aqui povoar. E nós também teremos ensinado preencher de outro campo que é itens de ordem. Vamos tentar isso agora. Veremos que temos o produto e a quantidade. Mas e se eu quiser também preencher este produto de uma forma que vemos os detalhes do produto dentro ou os itens. Então, como vimos aqui, o usuário, nós temos todos os detalhes dele. A diferença aqui que temos uma matriz deles. Portanto, precisamos saber como preencher o produto dentro desta matriz de itens de pedido. Para fazer isso, temos aqui uma maneira diferente de povoar. Então, em vez disso, o método populate será um objeto que aceitará um caminho. E aqui eu coloco item do pedido ou itens do pedido. E dentro deste objeto, eu digo também preencher para mim o campo, que é chamado de produto. Então eu vou colocá-lo aqui e tentei de novo. Veremos como uma magia. Temos todas as informações sobre os itens do pedido. E em nosso banco de dados, a ordem se parece com isso. Então, se atualizarmos, temos nosso pedido apenas com IDs e itens de pedido são apenas IDs. Assim, desta forma, estamos mantendo um tamanho pequeno os documentos do banco de dados, e estamos fazendo as relações usando flexibilidade Mangusto. Se vemos também aqui que o produto tem a categoria e a categoria também é id. Se eu quiser preencher também a categoria, não podemos fazer isso. Sem problema. Podemos dizer também que isso é povoado. Este é um caminho que é chamado produto e, em seguida, preencher categoria que está dentro deste produto. Então, se formos novamente, enviar este pedido, vamos ver a categoria também é preenchido para toda a ordem. Então, para torná-lo mais limpo, não podemos ter aqui este caminho, então podemos entender como ele foi construído. Então aqui eu tenho que dizer aqui, este aqui. Agora tenho o código limpo. Então esta é a maneira como fazer população da relação entre as tabelas no banco de dados. Vemos no futuro. Agora, como excluímos essas ordens e como atualizamos o estado dessa ordem, que será na próxima palestra. 49. Atualização em estado do pedido: Depois que fizemos a solicitação GET e postar solicitação para ordem, Vamos fazer a solicitação de atualização como os requisitos do meu problema para cima. O administrador do A-Sharp quer apenas alterar o status do pedido. Então, quando algum cliente faz um pedido para a loja virtual, o proprietário da loja quer processar isso mais antigo. Assim, desta forma, o pedido será transferido de flexão e, em seguida, para processado e, em seguida, por exemplo, para mudar e, em seguida, para o estado entregue. Então, precisamos apenas atualizar o status do pedido. Vimos anteriormente como estamos atualizando, por exemplo, o produto. Estávamos atualizando todos os campos para que o usuário ou o front-end deve me enviar todos os campos novamente. Mas aqui nas ordens, só precisamos atualizar um campo, que é o status, que é este. Para fazer isso, vamos fazer isso rápido. Copiamos uma das solicitações, por exemplo, de categorias. Nós pegamos esse. Nós copiamos para as ordens. Aquela identificação exterior. Precisamos da identificação. E então direi aqui que tenho a ordem. Aqui. Peço o modelo do pedido. E aqui não passamos nada, apenas o status. Assim, o status virá da exigência ou solicitação ponto corpo, ponto status. Dessa forma, se não houver nenhum pedido atribuído com este ID, então eu estou enviando um erro. Caso contrário, eu estou enviando de volta o pedido atualizado. Claro que você pode adicionar todos os campos que deseja atualizar. Mas os requisitos para este e-shop, Eu só preciso atualizar o status. Vamos guardá-lo e tentar isso com o carteiro. Então, já temos esta ordem, Vamos atualizar. Então eu vou ter uma linha e o tipo de que ou é JSON. Então, aqui vou dizer que o status será, por exemplo, enviado. Então eu coloquei aqui enviado. E precisamos também de alterar este pedido para colocar. E nós enviamos. E temos a mesma ordem que um turno. Então vamos pegar novamente a ordem. Temos um chegar aqui, verifique. Nós vemos o detalhe do pedido já e temos o status do pedido será enviado. Excluir o pedido será o mesmo. Vamos copiá-lo também a ordem Excluir da categoria. E aqui vamos adicionar ordem, encontrar por ID, e então ele vai retornar para mim ordem. Se houver ou lá, então retorne o verdadeiro sucesso. Caso contrário enviar erro ou não encontrado nosso algum erro no servidor. Então vamos tentar isso com o Postman também. Vou mudar isso de get to delete. Nós apagamos e temos sucesso. Essa categoria é suprimida. Temos que consertar isso porque não é categoria. Temos que fazer isso como ordem. E aqui também ordem. Então agora, se eu quiser obter uma lista das ordens, novamente, teremos apenas uma ordem, que é a que chamou EUA. E agora tínhamos apenas um. Talvez alguém vai perguntar O que sobre os itens do pedido? Eles são apagados ou não. Vamos verificar isso no banco de dados. Em nosso banco de dados tínhamos itens de pedido e devemos ter dois pedidos apenas para encomendar itens, mas vemos que os itens do pedido ainda estão aqui. Então, temos um problema aqui. Precisamos também excluir os itens de ordem do pedido que é excluído. Então vou deixar isso como um exercício para você. Assim, o exercício será apenas para excluir os itens encomendados também depois de excluir o pedido. E então eu vou vê-lo no próximo vídeo para ver a solução, como implementamos a exclusão de itens de pedido depois de excluir o pedido. 50. Calculando o preço total de um pedido com Mongoose: Enviar o preço total a partir do front-end não é uma boa prática. Por exemplo, se algum hacker foi capaz de enviar um pedido com um preço total falso de alguma forma, então ele será armazenado no meu banco de dados com um preço total falso. Então talvez alguém tenha pedido foi cem, dez mil dólares, mas ele fingiu e conseguiu com 2 dólares. Quando eu tenho uma loja virtual muito ocupada, eu não vou detectá-la. Portanto, é melhor depois que o usuário está enviando os itens do pedido, IDs ou os itens do pedido em geral para o back-end. Calculamos isso internamente no backend com base no que temos no banco de dados. Então a fonte da verdade é um banco de dados. Então o que eu preciso fazer é fazer um loop sobre os itens do pedido que eu recebi do usuário ou do front-end. E então eu resolvo os itens do pedido. Eu recebo o produto relacionado ao produto. E com a quantidade, multiplico isso e calculo o preço total. Então tudo está vindo do banco de dados. Então vamos tentar fazer isso. Aqui. Temos IDs de item de pedido resolvidos. Então, de alguma forma, precisamos substituir isso por uma variável que calculamos internamente. Então vamos chamar de preço total. E este preço total virá de uma constante onde vamos resolver este pedido itens. Da mesma forma, clicamos em Criar uma constante, chamamos de preços totais. Porque nós estamos indo para loop em itens de ordem exatamente da mesma maneira aqui. Então vamos fazer isso como promessa ponto tudo. Então, aqui eu vou obter os itens de ordem resolvidos IDs e mapear sobre eles. E eu vou receber a identificação do item encomendado. Vou recuperar o item do pedido do banco de dados porque ele já está armazenado aqui no banco de dados. Então exatamente como aqui, diga assíncrono para o nosso item de pedido. E nós obtemos o item do pedido através aguarde. E temos também o modelo de item de pedido. E encontre por ID, a identificação que consegui aqui do mapa. E, em seguida, dentro deste item de pedido, obteremos apenas o ID do produto e a quantidade. Portanto, precisamos também preencher o produto. E para torná-lo mais rápido, podemos pedir apenas o preço. Então aqui eu vou obter item de pedido devolvido com o campo de produto dentro dele, apenas o preço. E então eu vou para Create Constant preço total, apenas um. E eu vou dizer o item do pedido que eu tenho do banco de dados, ponto-produto, ponto preço, porque nós temos o preço preenchido já multiplicado pela quantidade do item do pedido. Neste caso, vou obter também a quantidade multiplicada pelo preço. Receberei o preço total de um item. Então mapeando toda essa matriz, eu gostaria depois disso, retornar, apenas o preço total. Então aqui eu vou ter uma variedade de preços totais para cada item de pedido. Então vamos tentar console log esta matriz de preços totais para ter certeza de que tudo vai funcionar bem. E eu vou postar um novo pedido ou um novo pedido. Recebi um erro aqui porque estou log console uma promessa. Então aqui, como fizemos antes, que temos aqui apenas uma promessa, devolvida, prometida em tudo, toda promessa combinada, colocamos um peso. Então é simplesmente que nós também podemos colocar um peso aqui, como o peso e resolver esta promessa depois que tudo é feito dentro. Vamos tentar de novo. Reinicie o nosso servidor. Tente postar. Vamos ver aqui que temos matriz de dois itens ou itens de ordem com seu preço total. Então precisamos fazer a fusão ou resumir esses dois preços para um. Para fazer isso, não podemos simplesmente fazer um preço total constante. E este conjunto de preços totais, vou reduzi-lo. E é um método reduzido. É uma forma famosa de obter a soma de todos os números dentro da matriz. Então eu tenho a e b, devolva para mim um mais B. E aqui nós adicionamos um 0. Assim, o valor inicial é 0 e, em seguida, combinar a e B, ou combinar cada item desta matriz. Então aqui, depois que temos o preço total, podemos colocá-lo aqui, reiniciar nosso servidor, fazer uma solicitação, e veremos que criamos uma solicitação de post com o pedido. E o preço total é 146, que é combinado de dois itens de ordem. Vamos obter também este detalhe do pedido. Vamos aqui, colocamos no pedido GET para obter os detalhes. Então vamos ver primeiro produto, temos um 32 e a quantidade é três. E também o segundo produto é a quantidade 2, e o preço é 25. O preço total será 146. Desta forma, garantimos que o preço total vem apenas do nosso banco de dados, não do front-end. Então, em primeiro lugar, criamos os itens do pedido como vimos antes. Então temos o preço, preço total de cada item do pedido e, em seguida, combiná-los ou resumi-los para um número. E então criamos a ordem com o preço total, que vem totalmente do banco de dados. 51. Obtenha vendas totais de lojas em lojas usando $sum: Como sempre. E no final de cada módulo, fazemos sempre algum post ou pedido GET de alguns dados estatísticos. O que veio à minha mente aqui que, por exemplo, eu quero mostrar no painel do painel de administração do aplicativo quanto totais colinas eu tenho em toda a minha e-shop. Então, o proprietário da loja, quando ele trancou no painel de administração, ele vê o total de vendas e ele ficará feliz. Então, como sempre, vamos criar uma solicitação get. E a rota será obter e vendas totais. E aqui vamos, depois de passar esta API, após os pedidos, obteremos o total de vendas. Então aqui temos assíncrono, solicitação e resposta. E será um método ROM. E definimos uma variável, chamamos de vendas totais. E vamos obter o total de vendas diretamente do MongoDB. Então, usando Mangusto, aqui, eu tenho que esperar, o modelo de pedido. Então eu uso um método chamado agregado. E o agregado, eu posso agrupar como juntar, podemos dizer no banco de dados relacional, todas as tabelas ou todos os documentos dentro dessa tabela para um. E então eu recebo um desses campos nessa tabela e uso um dos métodos de Mangusto, como por exemplo, alguns nesse campo. Então ele vai retornar para mim a soma de todos os campos, que nome, Preço total. Se você se lembra, temos um preço total calculado já, como vimos na palestra anterior em cada ordem. Então precisamos somar todos esses preços totais em um usando alguns. Então, para fazer isso, temos aqui um objeto. Estamos agrupando a mesa. E aqui no método, dizemos que o ID é nulo. É assim. E nomeamos o campo que queremos retornar em nossa API. Então eu digo que o total de vendas é a soma. Esta é uma palavra reservada em Mangusto de preço total. O preço total é um campo na ordem, e nós calculamos aqui enquanto estamos criando a ordem. Então eu vou obter o total de vendas resumindo todos os preços totais. Em seguida, verificamos se não há vendas totais, em seguida, retornou para mim, resposta de erro.status. E então, por exemplo, dizemos 400. Não enviar, a ordem, vendas não podem ser geradas. Senão, dizemos ponto de resposta enviar. O total de vendas é o total de vendas. Vamos tentar isso agora com o Carteiro, eu vou aqui, eu digo para obter vendas totais. Enviamos um pedido. Vemos que temos matriz com ID nulo e total de vendas. Então vimos que temos exatamente o que construímos no grupo. Então, se eu remover este ID null, eu vou obter erro porque Mongoose não pode retornar qualquer objeto sem um ID ou ID de objeto 2, como vemos aqui neste erro, ele diz que uma especificação de grupo deve incluir um ID. Então, é melhor colocá-lo de volta. Ou você também pode dar ID usando especificações Mangusto, É melhor colocá-lo como nulo. Então vimos aqui que temos uma matriz. Nós também pode diretamente BOP este array e tomar apenas o total de vendas. Então, podemos dizer aqui, devolvido para mim total de vendas ponto pop porque é uma matriz. E, em seguida, vendas totais. Então, neste caso, eu tenho o primeiro item deste array, ou o item leve porque ele está retornando apenas um array com um item. Então eu digo, me dê este item e o total de vendas que eu especifiquei aqui. Tentamos de novo. Enviamos esse pedido, vamos obter o total de vendas é 290 para isso porque temos aqui, se recebermos o pedido, temos pedidos. Então a primeira ordem tem 146 e a segunda ordem tem também 146. Também podemos obter quantos pedidos são criados ou colocados na minha loja antes de como fazemos uma contagem total dos produtos. Então, podemos aqui copiar isso da API do produto e colocá-lo em pedidos. E dizemos aqui ou ali, conte a nossa subcontagem ou a contagem do titular da conta e aqui ordem. E com os documentos de contagem, vamos obter a contagem e retornar à nossa contagem de pedidos, e então nós vamos obtê-lo. Vamos tentar isso no nosso carteiro de novo. Então aqui eu digo GetCount. E veremos que temos três pedidos. Então agora a nossa API para os pedidos está concluída. Estamos prontos agora para usar toda a API relacionada aos pedidos no front-end. E na próxima seção, voltaremos ao produto para fazer upload das imagens. Você se lembra, nós temos aqui imagem e imagens. A imagem será a imagem principal de seu produto, e as imagens conterão as imagens da galeria de seu produto. Espero que tenham gostado desta seção e nos vemos na próxima. 52. Obter pedidos de usuário: No front-end, quando o usuário faz login, ele precisa saber quais pedidos ele encomendou no histórico. Então precisamos ter pelo menos um histórico de pedidos. Assim, desta forma, esta API será exatamente como obter o menor dos pedidos, algo assim, mas será especificado apenas para um usuário específico. Então vamos pegar esses pedidos GET e copiá-lo para o último. E vamos dizer aqui que eu quero obter, por exemplo, usuários mais antigos ou pedidos de usuários. E precisamos especificar como um, por exemplo, como um parâmetro, o ID do usuário. Então aqui dizemos ID de usuário. Então, quando estou enviando uma solicitação do front-end ou da nossa API, precisamos especificar o ID do usuário para o qual eu quero obter os pedidos. E como uma condição para a busca, dizemos objeto, campo de usuário deve ser pedido ponto params ponto. O mesmo paradigma que eu tenho aqui, ID de usuário. E talvez não precisemos preencher o próprio usuário. Precisamos preencher os produtos dentro deste pedido. Então, é exatamente como fizemos aqui no detalhe do pedido, como estávamos preenchendo os itens do pedido, produtos e categoria. Copiamos esse mesmo e passamos por aqui. Então, neste caso, vamos ver que os itens do pedido são preenchidos com os produtos e eles encomendados do mais novo para o mais antigo Para não ter nomes confusos. Vamos renomear isso. Por exemplo, podemos dizer usuário ou sua lista. E aqui lista de ordem do usuário aqui também ordenada pelo usuário. Vamos executar o servidor. Pm começar. O servidor está executando conexão de banco de dados pronto? Tentamos isso no Carteiro. Então eu tenho aqui ordens, obter ordens de usuário, e eu passar o ID do usuário, que eu quero ter seus pedidos. Então eu passo este e eu tenho outros itens. Eles são parecidos com isso. E outra ordem, ele também tem itens de ordem. Então nós temos os três pedidos para este usuário. Vamos ver aqui o mesmo nome de usuário são o mesmo ID de usuário. É sempre n igual a 4, 4. E aqui outro. Então, no final desta seção, você verá que você é capaz de criar quaisquer solicitações ou qualquer API que você precisa com base no que as necessidades no front-end. Então, por exemplo, temos aqui os pedidos do usuário e também temos, por exemplo, quantos pedidos eu tenho na minha edição. Isso é tudo sobre APIs. Na próxima seção, vamos aprender como fazer upload de arquivos para o nosso servidor, como imagens ou alguns anexos em geral. Nesta palestra, há anexo do código de recurso onde chegamos nestes pedidos. E você pode baixá-lo e tentar sozinho fazer algumas coisas diferentes com as APIs com base em suas necessidades. 53. Imagem de produtos e upload da galeria: Agora chegamos ao último módulo, que relacionado com a parte de trás e desenvolvimento. Precisamos agora fazer upload das imagens com o nosso produto, como vimos antes, o produto contém dois campos. Um deles é uma imagem principal e o segundo campo é as imagens. Então, onde será mais descrição sobre o produto como uma galeria de imagens? Então, neste módulo, você verá o passo principal é instalar a biblioteca Walter. Biblioteca é uma biblioteca famosa usada para carregar arquivos para o servidor usando Node.JS. E no segundo passo, vamos descobrir a melhor configuração para o nosso e-sharp porque precisamos configurar esta biblioteca para usar e carregar os arquivos para o nosso servidor. O terceiro, vamos ver como usar o destino e carregou os nomes dos arquivos. Sempre que o administrador carregar um arquivo ou uma imagem, ele deve especificar o nome do arquivo. Mas não, não podemos fazer isso para o administrador ou para o usuário. Não temos que deixar que ele nomeie o arquivo. Você pode fazer upload de qualquer arquivo e ele será codificado em nosso servidor. Usando Postman também é muito importante para o nosso caso aqui para testar o upload de imagem, vamos ver como testar o upload de imagem com um carteiro usando o upload de um arquivo ou vários arquivos. E não permitiremos que o usuário faça upload de nada. Precisamos que ele envie apenas tipos específicos de imagens, como a extensão PNG para J Beck. E, claro, tudo isso feito para um único arquivo. Agora precisamos estender a biblioteca para tornar possível o upload de vários arquivos. E vários arquivos são necessários para que possamos carregar muitas imagens para a galeria de produtos. E finalmente, vamos ver como buscar este produto com as imagens e as imagens da galeria para vê-las no front-end. Claro, vamos buscar apenas o URL da imagem. Espero que você vai desfrutar deste módulo e vê-lo na próxima palestra onde vamos começar a instalar biblioteca de argamassa. 54. Configure upload de upload em servidor: Certo, primeiro precisamos configurar o back-end para aceitar o upload dos arquivos. Para fazer isso, precisamos instalar uma biblioteca chamada Walter. Como qualquer biblioteca, nós instalamos Walter. E com isso, vamos instalar a biblioteca e usá-la para fazer upload de arquivos para o nosso servidor. E como sempre, fazemos constante, Walter e necessário argamassa. Vamos ver a documentação desta biblioteca. Se você vai para o Google e digitar motor, você verá os pacotes MPM, o site npm, onde temos todo o uso desta biblioteca. Para ver o uso mais detalhado ou o uso atualizado, você pode acessar a página inicial da biblioteca. Então aqui eu clico nele e ele me levaria para a página inicial da biblioteca de argamassa. Assim, o uso mais simples desta biblioteca será o seguinte, como ele está na documentação. Então, em primeiro lugar, precisamos de um formulário e esta forma será fornecida pelo carteiro, como veremos mais tarde. E o primeiro uso aqui que podemos chamar a biblioteca molto e , em seguida, configurá-lo com um destino em nosso servidor da pasta. Então, quando o usuário carregar qualquer arquivo através do formulário, ele será armazenado na pasta uploads, que estará na raiz do aplicativo back-end. E depois disso, em cada pedido de post, por exemplo, temos um produto posts que precisamos passar também não só a URL e a função de solicitação e resposta, precisamos também passar o upload, quero dizer o upload configuração da Walter. Então aqui podemos passar o upload e dizemos um único, passamos o nome do campo, que é visto do front-end. Então, como você vê aqui, o nome do campo é chamado Avatar, e aqui é passado no pedido. Mas aqui o arquivo enviado será exatamente o mesmo nome onde o usuário o carregou. Então, teremos um problema quando um cliente, ou desculpe, o administrador fará o upload do arquivo. Ele terá, por exemplo, outro arquivo com o mesmo nome. Então, este arquivo substituirá o arquivo antigo. E neste caso, temos um problema entre os produtos pode ser que eu vou perder alguns nomes de produtos ou algumas imagens de produtos. Então, a melhor maneira que precisamos ter mais controle sobre nomear os arquivos e nomear o destino. Então, por exemplo, precisamos, sempre que o arquivo carregado é carregado, precisamos renomeá-lo de alguma forma para alguns, um nome único e, em seguida, armazená-lo em nosso servidor. Para fazer isso em várias bibliotecas, há outra opção de ter um controle total sobre o nome dos arquivos, que é chamado de armazenamento em disco. E com este exemplo, vamos construir nossa API de upload. Então vamos usar esta parte. Vamos levá-lo exatamente o mesmo e copiá-lo para o nosso aplicativo. E vamos dizer que o armazenamento é armazenamento de disco Walter, que tem dois campos, o controle do destino e o controle do nome do arquivo. O destino será uma função onde ele tem o próprio pedido e o arquivo e o retorno de chamada. O retorno de chamada será retornado se houver um erro no upload e atribuirmos o destino nele. Então, aqui, vamos colocar nosso destino de upload. Podemos chamar isso de público e uploads. Então nós aqui, teremos uma pasta chamada uploads públicos. Podemos criar esta pasta. Então podemos dizer aqui no back-end, podemos dizer uploads. E dentro dele, ou desculpe, poderíamos ter público primeiro. Público. E o público estará no nível da raiz. Assim, terá, por exemplo, aqui. E o público, a pasta de uploads estará dentro dela. Então aqui agora temos uploads públicos. Então, no futuro, quando enviarmos o arquivo, vamos vê-lo aqui localizado diretamente nos uploads públicos. No nome do arquivo. Será a mesma coisa. Ele conterá o pedido de rock e o arquivo. E precisamos de alguma forma renomear o arquivo para atender às nossas necessidades e como ele será localizado em uploads. Então há outra maneira como ele está criando aqui. Por exemplo, o, algumas matemáticas aleatórias para ter uma nomeação aleatória do aplicativo ou sobre o arquivo. E então ele colocou o nome do arquivo original com traço e o sufixo único que ele criou antes. Vamos fazer de outra maneira. Então eu criaria uma constante. Vamos chamá-lo de bom nome. E este nome de arquivo será o arquivo em si que obtivemos o nome original. Já está definido. E então dizemos, alguma forma, para substituir os espaços, não é bom ter espaços na nomeação dos arquivos no servidor. Porque quando você tem o URL, você terá URL feio onde ele irá substituir como com comercial t2 para os espaços. Mas aqui podemos ter exatamente o nosso substituído os espaços por divisão. Então eu estou dividindo o nome do arquivo com base no espaço e a substituição ou junção. Mais uma vez este espaço com um traço. Você também pode usar outra maneira, que é, por exemplo, ponto substituir cada espaço por um traço. Ambos os lados estão bem. Então, também podemos adicionar algum prefixo ou sufixo a este nome. Então aqui podemos dizer o nome do arquivo. E, por exemplo, podemos dizer muito encontro agora. Então, aqui DataNode agora método, se nós vê-lo, ele irá retornar o número do dia. Então, podemos experimentá-lo com o console do Google Chrome. Você pode dizer “encontro” agora. E você vai ver que você tem o número da data e a hora agora. Portanto, este é um grande número único para criar nossos arquivos. Então, depois disso, criamos uma constante. Vamos torná-lo como uma constante, não como um VAR. E essa constante é chamada de upload. Novamente, chame-o, por exemplo, opções de upload. E essas opções de upload, precisamos passá-lo para a nossa solicitação de post onde estamos criando o produto exatamente da mesma forma como ele é descrito na biblioteca Malta. Então, se vemos aqui que temos também o único upload e Avatar e o nome do campo. Nome do campo, precisamos enviá-lo do front-end. Então aqui dizemos opções de upload, ponto, único, e o nome do campo para onde eu quero enviar a partir do front-end. Então eu digo, por exemplo, imagem. Mas aqui quando estamos criando o produto, estamos analisando pedido ponto corpo ponto imagem. Isto é errado. Precisamos editar este campo para ter o caminho completo da imagem. Então, eu sou Walter já nos enviou com este pedido, o arquivo. Então não podemos dizer, por exemplo, nome do arquivo constante é o arquivo de ponto de solicitação, o nome do arquivo ponto. E este nome de arquivo vindo daqui onde nós configuramos o nome do arquivo enviado. Então vamos ter o nome exatamente como nós tê-lo desta maneira. Como o nome original do arquivo, substituído por traços e depois traço, eles não sabem. Vamos fazê-lo desta forma. Temos um nome de arquivo e, em seguida, colocamos o nome do arquivo aqui. Mas quando eu quiser buscar esses dados no front-end, e eu quero ver o, OR, por exemplo, exibir a imagem no front-end. Terei que emitir isso. Eu vou ter apenas o nome do arquivo. Por exemplo, eu obteria imagem 300, 300 pontos J Beck. E isso é um problema para nós porque no front-end não sabe o caminho original do arquivo. Precisamos de alguma forma ter o caminho completo com a URL também do backend. Então eu vou dizer http, localhost 3000 e a pasta de upload. E então a imagem com o nome e a extensão. Sentimos que também chegou aqui para adicionar a extensão. Então nós temos o nome do arquivo apenas como este. Precisamos também editar as opções de nome de arquivo aqui. Para ter também com a extensão. Veremos isso quando estivermos validando o arquivo nas próximas palestras. Mas agora vamos nos concentrar nesta parte que precisamos do URL completo, não apenas o nome do arquivo. Para isso, precisamos construir de alguma forma essa corda. Então podemos dizer constante. Podemos dizer caminho base, como o caminho base fora de sua aplicação. E podemos fazer isso com backticks de alguma forma, como ponto de pedido. Tem um campo chamado protocolo. E este protocolo devolverá para mim o HTTP. E então vamos ver que temos dois pontos barra barra e precisamos passar o host. Assim, também podemos fazê-lo da mesma maneira. Podemos dizer pedido ponto get, obtendo um campo específico chamado host. Esta é uma maneira de obter o host a partir da solicitação. Então agora construímos nosso caminho base. Vamos adicionar quatro. É também a parte onde estamos dizendo a pasta onde ele é carregado. Por isso, temos de acrescentar também esta parte. Para que possamos dizer assim. E então adicionamos apenas o nome do arquivo. Então podemos dizer aqui, depois disso temos backticks, caminho base, e o nome do arquivo. Desta forma, nós construímos nossa URL API ou URL de arquivo carregado. Dessa forma, temos o caminho base é esta parte e o nome do arquivo, que é esta parte. Vamos tentar isso agora com o carteiro. E experimente se tudo está funcionando bem. 55. Testando o upload de imagens com o postman: Agora vamos testar nossas mudanças com o Carteiro. Você se lembra, nós criamos aqui o campo de imagem, que terá o caminho e o nome do arquivo que é carregado. Indo para o Carteiro. Precisamos criar uma solicitação de post na API do produto e adicionamos a autorização com o token de barreira que obtivemos antes. E nós temos o token aqui para lembrá-lo, nós temos esse token depois de obter um usuário conectado. Então aqui vou eu. E então eu olho em um usuário com seu e-mail e senha, então eu vou obter o token. Isto. Se você não sabe como obter este token, o que explicamos isso no capítulo do usuário. Está bem, mas agora como podemos testar o Carteiro para carregar ficheiros. Você se lembra que estávamos enviando o corpo da solicitação como um JSON, e estávamos criando o JSON aqui e estávamos colocando o nome do produto ou a descrição do produto ou a descrição e o preço. Mas aqui será diferente um pouco. Na frente, será algo como uma forma. Formulário era campos como você vê lá dentro direita da tela. Então aqui temos um campo onde vamos preenchê-lo e enviá-los para o backend. E o campo de arquivo onde o usuário pode fazer upload de um arquivo. Isso será preenchido com um arquivo de dados, e os dados do arquivo serão enviados para o backend através de um formulário de dados. Então precisamos criar algo como um formulário de dados e homem em relevo. Se você quiser simular um formulário, você pode criar um formulário de dados e cada campo será nomeado aqui com seu valor. Por exemplo, terei aqui o nome do produto. E, por exemplo, o produto que quero publicar será o produto seis. E eu quero também, por exemplo, descrição do produto. E aqui será o produto procura descrição. Então precisamos de alguma forma colocar todos os campos que queríamos como vimos anteriormente, o modelo de produtos que temos aqui. A descrição lê, descrição, imagens e tudo aqui. Então precisamos ter o campo de imagem, deixe-me sentir os campos aqui no Carteiro. E então vamos falar sobre as imagens. Então aqui nós preenchemos todos os campos de formulário que precisávamos enviar para o backend e com seu valor. Então, para a imagem aqui, ele vai evalue, não será, por exemplo, textos como aqui, ou um valor, ou um número ou um booleano. Será um arquivo. Então, como podemos fazer isso como um arquivo? É muito simples. Temos carteiro, Há um truque que quando você coloca o mouse, o campo, onde você quer mudar? Você pode selecionar que o tipo desse campo pode ser um arquivo. Quando você coloca o arquivo, você terá sua capacidade de selecionar um arquivo do seu PC. Exatamente como você está carregando um arquivo no formulário da Web. Então vamos selecionar uma imagem. Eu tenho aqui, muitas imagens, por exemplo, esta aqui. E vamos fazer o upload e enviar o pedido de postagem. Veremos que a solicitação de postagem é criada exatamente como fizemos isso no back-end. E temos a imagem como um URL completo. E o arquivo de imagem com a mesma extensão aqui. Mas se você ver aqui que nós temos uma extensão e, em seguida, a nomeação, então nós temos um problema aqui. Então precisamos de alguma forma excluir esta extensão e colocar esta data ponto depois, e então colocamos a extinção no final. Vamos fazer isso rápido. Vamos alterar a sua configuração aqui da nomeação do arquivo em Walter para obter o nome do arquivo derivado com a extensão. Então vamos mudar esta parte com os backticks será mais agradável no código. Então podemos ter o nome do arquivo Dash, este documento agora. E nós precisamos aqui para adicionar de alguma forma a extensão para que possamos dizer ponto e aqui será a extensão de onde eu vou obter a extensão. Na próxima palestra, vamos ver como validar esses arquivos que estão chegando ao back-end. Então, precisamos que o usuário faça upload apenas de tipos específicos de imagens. Precisamos que ele envie apenas JPEG e PNG. Portanto, não podemos deixá-lo aplaudir, por exemplo, um arquivo PDF ou, por exemplo, um arquivo XML. Então precisamos de alguma forma o back-end para recusar um pedido quando não há uma imagem. Isto é o que faremos na próxima palestra. 56. Validando tipos de arquivos enviados: Certo, agora precisamos criar nossa extensão. Mas primeiro dissemos que precisamos validar os arquivos enviados do usuário. Para fazer isso, precisamos criar uma lista de arquivos que são permitidos que backend completo para aceitar. Então podemos definir uma constante. Nós dizemos o tipo de arquivo mapa. E este mapa de tipo de arquivo conterá uma lista de extensões que podem ser carregadas no meu back-end. O primeiro campo será a imagem PNG. E depois PNG. Por que eu fiz isso dessa maneira. Então aqui temos a chave como um ponto de imagem PNG e o valor é um PNG. Isso precisamos disso por causa do tipo mime. Tipo mímico. Se você o Google, é tipo imediato e conhecido como extensões de e-mail de internet multiuso ou tipo mime. E este é um padrão que indica a natureza e o formato de um arquivo de documento. Cada solicitação é enviada para o back-end. E o arquivo que está contendo o arquivo de dados ou os dados do arquivo, também tem um tipo MIME. Um tipo MIME tem um formato como este. Então eu recebo e PNG documento dxdy. Assim, desta forma, eu posso definir qual é o tipo de arquivo que está vindo para o backend. Os três tipos mais importantes que precisamos em nosso back-end são este, PNG, JPEG e JPEG. Então aqui vamos ter esses tipos. E em Walter, quando eu quero configurar o nome do arquivo, eu posso encontrar aqui algo chamado tipo mime. Assim, o tipo MIME irá incluir as informações ou as informações do arquivo com a estação de tinta do tipo mime aqui. Então, para termos a extinção certa, vamos fazê-lo desta forma. Extensão const igual ao laboratório de tipo de arquivo e obter o valor do tipo MIME de lote de arquivo. Então aqui ele irá para esta matriz e tomar o tipo MIME, que vem um destes, e então atribuir a extensão como um valor. E aqui eu vou obter o valor ou a extensão para o meu nome de arquivo. Certo, falamos sobre validação do arquivo. Então precisamos de alguma forma validar o arquivo se ele tem permissão para ser carregado ou não. No retorno de chamada do destino, você pode definir o erro. Então, quando há um erro, o retorno de chamada irá jogá-lo aqui. Então, primeiro podemos fazer uma constante é arquivo válido, por exemplo. E usaremos o mesmo conceito aqui. Então ele vai obter o tipo mime e verificá-lo se ele é encontrado no mapa que eu atribui no meu back-end. E em Node.JS, podemos definir um erro. Então eu posso dizer aqui, deixar o erro de upload é igual a novo erro. E podemos dizer que o erro é um tipo de imagem inválido. E então podemos verificar se há, é válido. Em seguida, faça este erro de upload como freira. E, em seguida, usa o erro de upload no retorno de chamada. Portanto, se o arquivo é válido, não há erro e o retorno de chamada será executado. Lembra-te, enviámos um ficheiro com o Postman e tem este nome. Então agora não vamos ter este JPEG aqui. Teremos isso no final. Talvez ele fique aqui, mas teremos pelo menos extensão no final. Vamos testar isso com um carteiro. Agora, com o nosso formulário, tenho os mesmos dados, mesma imagem que enviei. Envie esse pedido, eu recebi uma imagem enviada. E vamos verificar a extensão. Vamos ver que tem a extensão no final e o nome do arquivo. E aqui está a imagem funcionando bem. Vamos tentar fazer upload de um arquivo, mas não da imagem. Podemos dizer, por exemplo, um PDF. Então eu tenho aqui um PDF de teste. Vou fazer o upload dele. E temos o erro. Então temos um erro, esse tipo de imagem inválido, que criamos aqui. Então, aqui no front-end, vimos que quando carregamos o PDF, conseguimos o problema. Mas o que, por exemplo, J peg, enviar esse pedido. Não temos nenhum problema. Temos o caminho completo e temos também a extensão. E toda vez que faço uma solicitação de upload, recebo novos dados e uma nova data e o arquivo, é o mesmo, mas é carregado novamente com um nome diferente. Indo ao nosso banco de dados no Atlas, podemos verificar o arquivo ou o produto que é criado. Vamos ver o produto tem a imagem e tem uma URL completa. Portanto, isso será acessível a partir de qualquer lugar em nossa aplicação. Mas devemos ter algo como excluído da autenticação. Porque se você se lembrar, todas as API são autenticadas. Então não podemos fazer nada sem sermos autenticados. Mas precisamos que isso seja público, o que veremos nas próximas palestras. Na próxima palestra, vamos ver se o arquivo é realmente existe. Portanto, se não houver um arquivo ou imagem para o produto, precisamos rejeitar o pedido. 57. Carregamento de imagens com o pedido de poste de produtos: E se o front-end me enviar o pedido sem um arquivo? Então esse campo de imagem requerido seria recusado a lidar com isso. Vamos primeiro verificar se temos um arquivo em nossa solicitação. Então eu vou aqui e criar uma constante, chamá-lo de arquivo e dar a esta constante o valor do arquivo de ponto de solicitação. E exatamente com a categoria, podemos fazer o mesmo com o arquivo. Então eu digo se não houver arquivo, então retorne um erro ao usuário de que não há arquivo. Desta forma, teremos certeza de que nosso pedido não passará sem um arquivo. Quando vamos para o Postman e enviar o pedido sem arquivo, vamos ter que não há nenhuma imagem lá pedidos. Na próxima palestra, veremos como usar imagens para carregar várias imagens, que serão, por exemplo, uma galeria sobre o produto. Assim, em uma solicitação, o usuário enviará vários arquivos, não apenas um arquivo. E isso acontecerá no campo de imagens. 58. Carregamento de imagens com o pedido de compra a produtos: Quando estamos para ir semana para atualizar um produto, também, precisamos nos preocupar com a imagem. E daí se o usuário quiser fazer upload de uma nova imagem para seu produto, como se ele quisesse atualizar a imagem em si. Para isso, vamos fazer os mesmos passos que fizemos para o post. Então precisamos adicionar as opções de upload, bem como para a solicitação PUT. Então nós adicionamos aqui e então nós vamos fazer algumas mudanças aqui. Então, primeiro, se o usuário não carregar nenhuma imagem, então eu quero manter a imagem antiga que está no banco de dados. Mas se ele carregar alguma imagem, então eu preciso enviar e carregar novamente a imagem para os arquivos e, em seguida, adicionar o novo URL para o banco de dados. Vamos fazer este cão ecoar. Então, primeiro de tudo, eu quero encontrar o produto. Então eu adiciono aqui uma constante chamada um produto e o produto encontrar por ID, pedido dot powerapps dot ID, e então eu verifico se não há nenhum produto, em seguida, retornou para mim status 400, que é produto inválido, Ok, agora está tudo bem. Em seguida, garantimos que o usuário está realmente inserindo um produto específico e chegado. Outra coisa, então vamos obter o arquivo em si. Então eu vou dizer arquivo const e este arquivo, nós viemos com o seu arquivo ponto pedido como fizemos exatamente com um pedido post. E então eu vou definir um caminho que é chamado caminho de imagem. E este caminho de imagem está vazio. Vou usá-lo para preencher o caminho da imagem. Ou ele será o antigo que já está no banco de dados, ou então você arquivo caminho se o usuário carregou uma nova imagem lá pedido PUT. Então, como uma lógica, vou dizer se arquivo, então exatamente como fazemos com o pedido de post. Vou definir um nome de arquivo e, em seguida, de caminho base. E eu vou dizer que o nome do arquivo ou o caminho da imagem será exatamente o mesmo que temos aqui. Então, teremos o caminho base e também o nome do arquivo juntos como banho de imagem. E então, se não houver nenhum banho de imagem ou se houver arquivo, então eu diria que o caminho da imagem é o mesmo o caminho da imagem antiga que foi definido anteriormente quando o produto foi criado. Então eu diria produto, essa imagem, a antiga porque eu tenho o ano produtivo e eu garanto que o produto realmente existe. Então eu não estou jogando erro para o usuário. Então, com certeza, o produto tem um valor aqui. E então eu vou dizer se são cinco, então carregue o arquivo e me dê o passado para ele. Senão, dar o caminho da imagem será a imagem do produto, que foi anterior. E então aqui vou dizer que a imagem será o caminho da imagem com os dados atualizados. Mas aqui vamos renomear esse produto. Então podemos dizer um produto aqui para obter o produto. E podemos dizer aqui, produto atualizado eo produto atualizado, Eu encontrá-lo e, em seguida, verificar e, em seguida, enviar esse pedido de volta com os dados atualizados. Portanto, essas são as alterações necessárias para a solicitação de postagem. Neste caso, você não receberá nenhum erro e você vai ter quaisquer problemas quando você está carregando a imagem novamente ou quando você não carregar a imagem. Então o usuário aqui tem opção, ele pode fazer upload de imagem ou não na solicitação PUT. 59. Galeria de produtos em imagens múltiplas: Ok, aqui nós tínhamos um único arquivo, então nós carregamos apenas um arquivo para a API. Mas aqui precisamos de vários arquivos para a galeria de produtos. Da mesma forma, podemos alterar este pedido de post para aceitar também um vários arquivos. Mas vamos tornar um pouco mais complicado ter um verdadeiro exemplo prático. Normalmente, quando você está atualizando um produto ou adicionando um produto, a segunda coisa que você faz é carregar a galeria de imagens. E isso acontece normalmente nas lojas web. Depois de criar um produto, tudo está bem. Em seguida, você vai e edita o produto novamente para ablar a galeria de imagens. Então vamos criar um ABI específico apenas para carregar a galeria do produto. Esta API será uma solicitação de atualização, não uma solicitação de postagem. Então precisamos do pedido de correio. Então eu copio este pedido post. Vamos até o final e adicioná-lo aqui. Além disso, podemos manter a ID do produto e também podemos adicionar suas dúvidas onde vamos atualizar apenas as imagens da galeria. Então aqui podemos adicionar imagens de galeria. E, em seguida, o ID do produto. Como vimos antes na solicitação de post do produto, adicionamos também a opção de upload única imagem. Também podemos adicioná-lo à solicitação PUT. Então, podemos adicionar aqui opções de upload, mas não único. Vamos dizer “array”. Então vamos esperar do front-end nossa matriz de arquivos, vamos chamá-lo emite. E se você notar aqui que o método array está me dando também uma contagem máxima. Assim, você pode permitir o tamanho máximo de upload de arquivos. Então, por exemplo, eu vou dizer máximo, eu preciso de 10 arquivos ou 20 arquivos em uma solicitação. Então vamos colocar como 10. Morremos mais nosso código. Então vamos ter isso em uma nova linha. Então não podemos dizer que este está aqui. E aqui, o método assíncrono. E aqui temos o porto e temos aqui o conteúdo do nosso pedido PUT. Assim, a solicitação de atualização de seu produto será atualizar exatamente esses dados, mas teremos apenas as imagens, não todos os dados. Então podemos fazer o mesmo que fizemos aqui. É copiar esta parte para ver se o usuário está passando o ID exato ou correto. Não precisamos verificar sua categoria porque não estamos atualizados. Então, vamos ter este também. Mas como dissemos, tínhamos todos os dados. Precisamos atualizar apenas a imagem. Então campo de imagem será matriz de imagens. Então, como vimos aqui, matriz de strings de imagem ou caminho da imagem. Então precisamos aqui de alguma forma para construir uma matriz de cordas. Então podemos ouvir, digamos, buffers de imagem. E esses observadores de imagens seriam valiosos como uma matriz de cordas. Então, como vamos construir esta matriz primeiro nessa solicitação, como vimos antes, que podemos ter arquivo de ponto de solicitação. Ou se você ver que temos um arquivo também não só. Então podemos dizer que os arquivos serão arquivos constantes. E exatamente como antes, podemos verificar se há arquivos. Então eu vou loop dentro desses arquivos e construir as imagens incomoda matriz. Então aqui eu vou mover isso para cima e dizer arquivos mapa ponto. E isso terá arquivo. E dentro deste método de arquivo, podemos dizer Caminho da imagem é ponto push, o nome do arquivo ponto fino. Mas não temos que empurrar apenas o nome do arquivo. Precisamos empurrar também a URL base e também com a extensão. Então, se você se lembra, criamos aqui a URL base, que criamos para as solicitações de postagem. Então, podemos copiar esta parte também e ir para o método put e dizer aqui a URL base ou o caminho base. E empurramos o caminho base com o nome do arquivo. E aqui podemos devolver o produto. Então exatamente como o pedido PUT, podemos verificar se há produto, então isso é lagoas ser os dados do produto. Caso contrário, será um erro. Então copiamos esta parte e colocamos aqui. Vamos testar isso com o Postman sobre o que temos a ver com o carteiro, que colocamos vários arquivos aqui. Então vamos criar um campo, chamá-lo, por exemplo, imagem. E esta imagem será um arquivo. E selecionamos dois ou imagem, por exemplo. E não nos esquecemos disso para alterar a API. Então aqui será Galeria de imagem e o pedido é colocado. E precisamos também da identificação do produto. Exactamente este. Vamos pegar nosso produto, ou produto é o produto seis, que criamos antes. E agora vamos adicionar o ID aqui. E enviaremos esse pedido. Nós temos o nosso erro, eu esqueci aqui para adicionar produtos. Então, teremos o caminho certo. Agora vamos tentar. E então veremos o produto foi atualizado. E nós temos duas imagens na galeria e imagem principal, Ele ainda está lá. Vamos verificar a nossa pasta de envios. Veremos que temos duas imagens, esta e esta. Assim, no front-end, sempre vamos atualizar nossa galeria ou atualizar um produto e adicionar a ele as imagens da galeria. Isso é tudo sobre esta seção. Na próxima seção, vamos ver como buscar o URL da imagem, para que possamos vê-lo no navegador e no front-end, porque agora ele está bloqueado e não temos acesso a ele porque está protegido com nossa API autenticação. 60. Excluindo pastas de upload de arquivos de upload de a autenticação: Agora vamos tentar obter este URL e colocá-lo no navegador, o URL da imagem. Então, colocamos no navegador e veremos que o usuário não está autorizado. Isso porque se você se lembra, em nosso JWT, estávamos definindo o banho é que são permitidos para público. Então, precisamos adicionar o caminho da pasta de upload para ser permitido para que qualquer um possa ver essas imagens. Caso contrário, teremos um problema. Portanto, a loja virtual não mostrará as imagens do produto. Então vamos copiar este. Será exatamente o mesmo Git e opções. Precisamos também substituir este pelo caminho da pasta uploads. A expressão regular para este é este. Eu tenho barras, barras públicas uploads em tudo vem depois dele. Vamos salvá-lo. E vamos para o nosso navegador. Refresque. Veremos erro de que não podemos obter imagem de upload público. Por que isso porque é uma pasta estática. Precisamos definir esses upload público como uma pasta estática no middleware de nossa aplicação. Então, para fazer isso, precisamos ir para o nosso app.js. Então vamos aqui e dizemos “use”. E então definimos o caminho que precisamos para torná-lo estático. Então, envios públicos. E, em seguida, no Express, há método para dizer que esta é uma pasta estática e uma palavra-chave reservada, que é terrível nome retornar para mim o caminho raiz ou o caminho raiz do aplicativo. E mais o caminho que eu queria torná-lo como uma estática. Então agora este caminho, qualquer arquivo pode ser carregado para ele. Não será como uma API. Será como um caminho estático que está servindo os arquivos. Então, de volta ao navegador e fazemos uma atualização. Ainda recebemos o erro. Isso porque eu preciso adicionar barra atrás do público. Atue com nosso navegador e atualize. Vamos ver a imagem que já tínhamos no front-end sem qualquer autenticação diretamente pelo URL. Agora nosso back-end está pronto. Criamos as rotas, quatro categorias, pedidos, produtos e usuários, que precisamos exatamente para nossa loja eletrônica. Vamos passar agora para a parte front-end e você verá mais do que coisas novas e como nos reconectamos a esse back-end e criamos nossa interface de webshop. 61. Instalando o Heroku e prepare o git: Ok, Nesta seção vamos implantar nosso backend ou nossa API Web para Heroku. Heroku é uma das ferramentas que é usada para implantar o projeto ou APIs web. E eles podem ser públicos e podemos usá-los em seus projetos. Então você não terá sua API baseada apenas no localhost 3000 como vimos, mas vamos colocá-lo em algum URL e podemos conectar nossos aplicativos front-end a ele. O primeiro passo que temos que fazer, temos que ir a um site chamado Heroku.com e, em seguida, somos convidados a ser trancados. Claro, se você é alguns não tem conta aqui, você também pode se inscrever. A inscrição é muito simples. Basta fornecer FirstName, sobrenome, endereço de e-mail. E qual é o seu papel? País? E também, você tem que colocar um pouco de linguagem de desenvolvimento de dinheiro Brian. Temos que colocar NodeJS no nosso caso e você tem que verificar se você não é um spam e então você pode obter uma conta. Depois de fazer login, você verá um painel como este. Então este painel, precisamos criar um aplicativo que vamos torná-lo público para a nossa API. Então, primeiro de tudo, você precisa criar um novo aplicativo. E esta criação de um novo aplicativo, você pode dar qualquer nome para o seu aplicativo. No meu caso, eu daria um nome como e-shop, back-end, por exemplo. E talvez esse nome não possa estar disponível, então você precisa especificar algum nome específico. Talvez você possa dar como qualquer sufixo aleatório. Por exemplo, você pode colocar seu sobrenome. Por exemplo, vou colocar o meu sobrenome ou o nome da minha empresa. Eu vou ver, eu diria como um pedaço azul. Então, nesse caso, terei e-shop de volta e pedaços azuis. E então você escolhe sua região é melhor usar a região mais próxima onde está mais perto para seus clientes-alvo. Então é melhor para mim neste caso, eu estou vivendo na Europa. Então eu vou colocar a Europa e, em seguida, você tem que clicar em criar um aplicativo. Por isso, criámos agora uma obrigação. Há algumas instruções que temos que fazer primeiro. Primeiro precisamos baixar e instalar o Heroku CLI. Vamos para este link e verificar. Então, neste link você pode ver várias opções para instalar Heroku. Então, por exemplo, você tem maneira macOS, você pode usar comentário se você tem Homebrew e também se você tem o Windows, você pode instalar um instalador. E também para abrir TO dessa forma, que eu gosto sempre de usar é usando NPM, NPM global instalado. Então você pode fazer npm instalar dash global, Heroku. Então vamos a Paris fazer isso. Então eu vou aqui e abrir meu terminal. Vou usar o botão Control J como vimos anteriormente. E então eu vou dizer npm instalado menos g. Então, desta forma, vou instalar o dispositivo Heroku Domain public, para que eu possa usar comandos Heroku em minha máquina. Mas o primeiro que preciso fazer é talvez precisemos ter permissões. Assim, as permissões, talvez ele não permitirá que você instale público ou globalmente. Você precisa prefixar este comentário com sudo. Então, como você vê aqui, eu não sou r. Eu não tenho permissões para fazer isso, então eu preciso prefixar este comando com sudo. Então, podemos dizer sudo nmap, mas no Windows, eu acho que você não terá nenhum problema. E então ele vai me pedir a minha senha. E então eu vou colocar a senha e ele será instalado com sucesso. Agora, como você vê, ele foi instalado, nós temos agora o comando Heroku. Então você pode, por exemplo, colocar Heroku assim e você obteria um comando como opções que você tem, algumas opções que você pode usar para seus comentários Heroku. Então volte para o nosso navegador. Após a instalação, voltamos ao nosso aplicativo novamente e temos que fazer uma boa edição. E também, temos que conectar nosso projeto Heroku ou nosso projeto back-end ao Heroku git. Mas antes de tudo, a coisa mais importante, porque antes de fazermos este passo, você tem, é claro, para criar um arquivo gitignore. Então, por exemplo, em Heroku, eu não vou implantar esse arquivo final. Este arquivo m contém minha string de conexão para banco de dados é meu segredo e também URL API. Eu não vou empurrar isso para o repositório Heroku git. Então, desta forma, precisamos adicionar um arquivo que é chamado git ignore. Então, quando eu uso um bom comentário de Heroku, então ele não vai empurrar esses arquivos que eu especificar. Então também, você não precisa enviar módulos de nó. Módulos Monod vêm normalmente um arquivo muito enorme, quase 200 megabytes, porque estamos instalando bibliotecas e suas dependências. Você não precisa usar módulos Node também. Então, criando ficar ignorado arquivo, É muito simples. Você só precisa criar um arquivo na raiz do projeto. Então você tem que dizer git ignore antes de fazer qualquer passo que é mencionado lá. Então, primeiro, você precisa ignorar a pasta de módulos do nó. Então nós dizemos barra nó sublinhado módulos. E também precisamos ignorar o arquivo m e também outros arquivos de desenvolvimento como o RC mais bonito, como você vê aqui, temos este arquivo para que possamos ignorá-lo também. Então, nesse caso, nós temos, estamos, estamos prontos para conectar nosso projeto ao repositório Heroku. Então voltamos para as instruções novamente e temos que dizer para entrar nele. Porque se não inicializamos nosso projeto anteriormente como vimos que não temos um bom, Nós não conectamos a nenhum bem. Então, nesse caso, precisamos dizer obter qualquer, ok, Depois que você entrar nele, você verá que há um arquivo criado neste repositório que está indo ou chamado como dot kid. E se você quiser vê-lo, você pode ir aqui para a pasta backend e você vai ver que esta pasta e foi criado. Então, a próxima instrução que precisamos para conectar Heroku git remoto. Mas primeiro precisamos usar o login Heroku. Então vamos primeiro investigar Heroku. Então eu vou usar Heroku login e, em seguida, ele vai me perguntar, você quer abrir o navegador e você pode entrar em seguida. Então não podemos dizer sim, podemos pressionar qualquer tecla e, em seguida, ele abrirá automaticamente o navegador. Então, como você vê aqui, eu tenho outra página. Está dizendo para olhar para Heroku CLI. Eu vou dizer olhar em e, em seguida, logado porque eu estou anteriormente conectado no mesmo navegador. Então, quando você voltar para o terminal, ele saberá que você já se conectou e, em seguida, você pode usar comandos Heroku, como mencionado na documentação. Depois disso, precisamos conectar nosso Heroku ou nosso projeto ao repositório git Heroku. Então nós precisamos usar este comando, todos esses comandos, você pode usá-los como você vê, digamos Heroku, git remoto, e depois adicionar E afiado volta e bits azuis. Então é exatamente o mesmo nome do aplicativo. Então vamos fazer isso. E então nós baseamos este comentário aqui. E então, como veremos isso, ok, o repositório Git é definido para este caminho. Então, agora, quando estamos indo para implantar nosso projeto ou enviar nosso código para lidar com cool, então Heroku vai obter ou ler todos os seus arquivos e o código que temos carregado a partir deste caminho. Na próxima palestra, vamos ver como podemos criar também um banco de dados de produção. Não precisamos usar o mesmo banco de dados que vemos porque talvez esse banco de dados possamos diferenciar entre desenvolvimento e produção. Como veremos na próxima palestra. 62. Criando o banco de dados de produção opcional: Ok, nesta palestra vamos falar sobre a criação de um banco de dados de produção. Então, quando você está fazendo um desenvolvimento ou quando você faz algum aplicativo, normalmente você tem um banco de dados espacial para você, apenas para desenvolver e testar coisas e fazer um progresso para sua aplicação. Mas depois de implantar o projeto para o ativo, então você precisa criar um banco de dados de produção. Neste curso, isso é opcional para você criar banco de dados ao vivo, banco de dados de produção ou não. Então nesta seção ou nesta palestra, nós vamos fazer isso. Se você se lembra, instalamos MongoDB Compass e este aplicativo MongoDB Compass, podemos criar bancos de dados e também podemos importar e exportar dados para ele. Então, em nosso curso, estávamos usando este banco de dados, que é chamado de banco de dados e-shop. Agora vamos criar um novo. Podemos chamá-lo de E afiado também, banco de dados. E seria uma produção ampla. Então podemos ter isso e podemos criar a primeira coleção, que será chamada, por exemplo, categorias. E então fazemos, criamos para o banco de dados, e o banco de dados é criado. Então, como você vê aqui, mas nós temos apenas uma mesa. Então, se você se lembra, eu anexei para você no início do curso, alguns arquivos, você pode usá-los como dados padrão. É como os dados que estamos inserindo fazer o banco de dados. É como semear. Então podemos usar também a semeadura que também aqui. Então, farei isso rapidamente. Então, como importar dados usando uma bússola? Você só tem que ir aqui, clicar em categorias, por exemplo, no nome da coleção. E então você pode dizer dados de importação. E então você navega até o arquivo onde eu te dei. Então eu lhe dei, por exemplo, categorias ou os itens e outras tabelas. Então, para isso, você pode usar para essas categorias e você tem que especificar aqui que você tem JSON. E agora estamos fazendo importação. E esta importação foi concluída. E veremos que nossos dados estão localizados aqui. Então vamos fazer o mesmo para todas as tabelas. Vou fazer isso rapidamente na sua frente. Então eu criei aqui uma nova tabela. Eu chamo de usuário, ou usuários. E esses usuários, eu vou importar esses dados também. Então temos que fazer o mesmo para todas as outras tabelas. Então agora minha produção de banco de dados está cheia. Então nós vamos usar este banco de dados, mas nós estamos apenas para sua aplicação de produto ou aquele aplicativo desenvolvido no desenvolvimento local Heroku, nós ainda estamos usando a questão do banco de dados. Então, como podemos fazer isso dinamicamente, como quando eu implantar ISA para o aplicativo usa banco de dados. Mas quando estou desenvolvendo, eu quero dizer para o aplicativo, ok, use este banco de dados. Então é bem simples. Nós vamos configurar essas variáveis de ambiente que são preferidos para Heroku porque nós vamos usar essas variáveis e nós usá-los dentro do aplicativo. E no desenvolvimento, podemos manter, por exemplo, essa cadeia de conexão. Mas na produção vamos ter outra cadeia de conexão. Mas aqui como você vê que o arquivo de ambiente não é implantado porque nós adicionamos ao git ignore. Então isso não será na implantação em Heroku porque Heroku não saberá que temos arquivo de ambiente aqui. 63. Configurando variáveis de desenvolvimento e ambiente de produtos: Ok, agora como podemos dizer ao aplicativo para usar esse banco de dados de produção, não o banco de dados de desenvolvimento. Primeiro de tudo, se você se lembra, nós adicionamos o arquivo m e no arquivo final estávamos usando ele para se conectar ao banco de dados que criamos no MongoDB Atlas. Então, a cadeia de conexão é armazenada no arquivo m como você vê aqui, e falamos sobre isso anteriormente. Então agora vamos ter uma cadeia de conexão diferente para a produção. Então, nesse caso, ok, estamos usando essa string de conexão aqui em conexões de processo para fazer. Mas como eu disse que quando estamos indo para implantar este aplicativo, este m-file, mais bonito, IC e módulo Node, eles não serão carregados para o servidor. Então, de onde o aplicativo implantado saberá qual string de conexão usar. Porque, nesse caso, quando eu implantar, ele não saberá qual string de conexão usar porque será indefinido aqui. E então teremos um erro de conexão. Então, para isso, vamos mudar primeiro tudo o que temos, como dois ou em nosso app.js, tudo o que precisamos mudar para estar em produção. Por exemplo, este nome, vou usar um banco de dados, mas no exterior, não este. Por isso, temos de mudar isso também. Temos também que usar algumas, outra variável, que podemos chamá-lo de nome dB, por exemplo. E podemos dar esse nome de banco de dados no arquivo. Então nós podemos, depois que foi uma linha, podemos dizer o nome DP. E então para local, terei que usar esse banco de dados de e-shop. Mas na produção vamos usar um diferente. Ok, o que mais? Portanto, o aplicativo também está usando uma porta específica. Então, quando você inicia o aplicativo em produção, como você vê aqui, quando vamos para o navegador para o nosso aplicativo e usamos, dizemos, por exemplo, abrir o aplicativo aqui no topo. Então teremos um novo aplicativo. Como você vê aqui, nós temos o link, mas ele não contém qualquer porta ou como, por exemplo, 3000 ou algo assim. Porque antes tínhamos como anfitrião local como este e 3000. Então não temos o conselho aqui. Então, como também podemos tornar o tabuleiro dinâmico. Por isso, temos de o fazer também porque na produção utilizará um porto diferente. Então também aqui temos que definir uma variável. Podemos dar-lhe como uma constante e dizemos porto. E esta porta virá também de variáveis de ambiente. E será chamado de porto. Se não houver porta, use 3000. Então, só para o caso de esta parte não vir ou vem com indefinido. Então usamos este quadro aqui. E no meu arquivo eu posso definir essa porta. Então podemos dizer também aqui, usar o porto, podemos dizer que o porto será 3000. Mas lembre-se, isso é apenas para desenvolvimento local. Não temos para isso para produção. A produção irá substituí-lo por outra porta. Mas a palavra-chave para isso será comprada assim. Então Heroku vai encontrar ou criar um porto por conta própria. Normalmente, é a porta 80, que é a porta padrão para o HTTP. Ok, agora temos um problema. Então, como a produção sem variável de cadeia de conexão. Então, como podemos criar isso. Então vamos novamente para o navegador onde criamos nosso aplicativo. E então vamos encontrar no topo algo chamado atividade ou configurações. E em suas configurações você vai encontrar um revelam vars configuração. Estes são, portanto, os vars de conflito que serão utilizados na produção. Então, nesse caso, eu preciso dizer para o meu aplicativo aqui, usar a cadeia de conexão, mas nós somos a produção um. Então eu vou voltar para o navegador e, em seguida, criar uma nova cadeia de conexão de chave será o que será. A conexão permanece a mesma, mas com banco de dados diferente. Então eu vou usar o mesmo. E então eu vou dizer que não usar banco de dados e-shop, mas cada um que obedece no exterior. E também, também precisamos criar outra coisa que é chamado de nome DP. Vamos usar esse nome afiado, que a base, então aqui também, E-sharp, que obedece amplamente também. Então, nesse caso, o aplicativo saberá que há uma string de conexão e ele iria lê-la a partir daqui. Então não temos que nos preocupar com isso. Portanto, é melhor também adicionar todas as variáveis de ambiente à conexão pois caso contrário nossa aplicação falhará. O que temos que usar aqui, API URL, que será a mesma coisa que tivemos lá. Será api barra v1 e estamos adicionando segredo. O mesmo. Deve ser também as mesmas letras maiúsculas ou letras pequenas porque é sensível a maiúsculas e minúsculas. E nós teremos aqui o segredo ou você pode usar outro segredo. Então, quando eu implantar meu aplicativo, em seguida, ele vai procurar por processo. Mas nosso erro local não é implantado porque nós temos isso no bom ignorar. Portanto, não estará no servidor para que Heroku não saiba do trabalho para obtê-lo. Ele irá para os vars de conflito e depois lerá esses valores. Então, neste caso, temos banco de dados diferente da produção e um banco de dados para o desenvolvimento local. Na próxima palestra, vamos ver como podemos usar isso e como podemos implantar o aplicativo para o servidor. 64. Implante o aplicativo e testo: Agora vamos voltar às instruções de implantação do aplicativo. Então, aqui se formos para o aplicativo novamente e clicamos em Implantar, e veremos novamente nossas instruções. Então já fizemos essa conexão e temos implantado ou fazer o link entre o aplicativo e o repositório Git do Heroku. Agora vamos executar esses comentários. Primeiro de tudo, precisamos adicionar o código para o bem, então precisamos cometê-lo. Então, se você não sabe o que é, É como se você estivesse dando informações sobre, como o código que você está enviando para o seu repositório. Então, quando eu mudar, eu digo, ok, eu mudei este, eu removo aquilo. Então eu diria na mensagem de commit que remover o manipulador de erros. Então, dessa forma, você mantém o controle sobre suas mudanças no projeto. Então aqui podemos fazer isso também com Heroku. Então temos que fazer git add dot e, em seguida, git commit dash am, torná-lo melhor ou qualquer mensagem. Então, primeiro de tudo, vamos fazer o bem. Isso significa que estamos adicionando todos os arquivos do projeto para o repositório Git para prepará-los para upload para o servidor. E depois disso, temos que fazer o git commit e, em seguida, traço m. E então você pode especificar uma mensagem. Então, por exemplo, implantar primeiro, morrer. Então nós também podemos adicionar esta mensagem de commit. Depois disso, precisamos empurrar o código para o cetera. Nós somos como fazemos isso com este comando, git, push, heroku, mestre. Então eu vou para o terminal e, em seguida, colar este comando aqui. E então ele vai carregar todas as informações ou todo o código que eu especifiquei, exceto os arquivos ou os arquivos e pastas que eu especifiquei no git ignorar. Então, nesse caso, teremos todos os nossos arquivos de desenvolvimento lá. Então, como você vê aqui, é dardo, fazer implantar o aplicativo, os arquivos terminados, ele, começar a construí-lo. E agora ele está mostrando todo o progresso da instalação de bibliotecas. Ele também instala o npm para instalação os pacotes que usamos para a nossa aplicação. E então ele terá módulos Node, mas no servidor, não este. Então, depois disso, ele irá comprimir o aplicativo para um uso mais rápido. E você também tem que se lembrar de carregar as imagens que estão na pasta de upload para que possamos ver as imagens também no, no servidor. Então, caso contrário, se você não tem as imagens que eu anexei como para você também, porque elas estão no banco de dados bem, os links para essas mensagens ou imagens. Você precisa carregá-los também para o seu servidor. Assim que a implantação terminou, verificando implantação, feito. Ok, vamos voltar para o navegador e ir para o aplicativo e atualizar aqui. - Legal. Temos uma mensagem, o usuário não está autorizado. Isso é ótimo porque, se você se lembrar, nós autorizamos nossa API. Então, se você se lembra nas rotas ou nos ajudantes, dissemos JWT que vamos excluir algumas rotas da autenticação, por exemplo, na obtenção de um produto ou obtenção de uma categoria. Então, vamos tentar obter um produto no navegador. Então eu vou dizer aqui exatamente se você se lembra de como estávamos fazendo com host local e 3000 e então eu coloquei API v1, e então eu coloquei produtos por exemplo. Então isso é como um pedido get quando você tenta, Ok, nós temos todos os dados do nosso banco de dados. Você não pode tentar isso tão bem quanto Carteiro, se você se lembra, nós estávamos trabalhando muito com o carteiro e nós estávamos tentando nossa API no Postman. Então, aqui vou abrir uma nova guia para um novo pedido GET e, em seguida, vou colocar este link. Então, o link do meu aplicativo API, produto v1. Então vai ser exatamente como eu estou fazendo isso como de anfitrião local. Então você vê que todas essas informações são armazenadas e estamos usando o banco de dados de produção. Nós não estamos usando o banco de dados que tínhamos para local. Então, para provar isso, Vamos fazer uma mudança no banco de dados usando bússola. Então eu vou para o meu aplicativo, eu vou para o banco de dados de produção. Vou clicar sobre isso e vou abrir os produtos. E eu vou para aquele em que começa com, eu me lembro como mol, algo assim. Então aqui o pequeno, você vê aqui o pequeno e este é. Então vamos mudar isso. Podemos dizer para mudar esta frase. Vamos para o, então clicamos no pequeno aqui e podemos dizer, por exemplo, no exterior. Para que possamos fazer isso maior e dizer produção. Então podemos adicionar esta palavra produção aqui. Então, depois de atualizarmos, e então vamos para o Postman, e então clicamos em Enviar. Certo, temos aqui produção. Então, esta é a prova de que eu estou usando o banco de dados amplo, mas no meu host local, Vamos tentar executar o aplicativo no local. Então podemos dizer npm começar como estávamos executando o aplicativo localmente, ok, O localhost 3000, tudo está bem. Agora vamos para a solicitação GET, mas no host local. Então nós temos aqui, por exemplo, localhost 3000 produtos API. E então se o chamarmos, veremos que estamos chamando o banco de dados, que está no host local. E se verificarmos este banco de dados, eu vou aqui. E vou verificar esta edição da base de dados. Vá para os produtos. Terei um monte de produtos fictícios que estávamos usando durante o desenvolvimento. Então, nesse caso, estamos diferenciando cada vez que eu implantado para a minha coisa polegar aplicativo, você pode então ele vai usar um banco de dados de sua produção. Por exemplo, vou mudar algo aqui. Vou adicionar um registo da consola. Que exemplo de log do console. Como usar, estamos usando. Por exemplo, você pode colocar adicional e, em seguida, você pode usar o nome do banco de dados aqui. Então, quando eu salvar, ok, no meu local, eu vou dizer que estamos usando o banco de dados de e-shop, mas precisamos implantar isso. Então aqui, nosso host local, local, temos banco de dados de e-shop, como sabemos para desenvolvimento. Mas se implantarmos isso, obteríamos, estamos usando a questão do banco de dados trouxe chá ou produto. Então, desta forma, como podemos empurrar mudanças, novamente, precisamos colocar git add e, em seguida, adicionar uma mensagem. Então, por exemplo, comentários, podemos dizer mudança, e então pressionamos enter, e então usamos novamente push comum. Então git, empurre heroku mestre, ele será implantado novamente. Então, como você vê aqui, ele está implantando novamente. O mesmo processo que vimos no primeiro passo. Agora está concluída a implantação. Como podemos ver que, por exemplo, esta mensagem que estamos usando, como o banco de dados, você, Quero dizer, como podemos ver o log do console ou os erros que vemos no desenvolvimento. Para ver que você pode ir fácil Dois mais aqui, e você pode verificar aqui uma exibição logs. Então, quando você clicar nele, você verá todos os logs como você está desenvolvendo localmente. Então dizemos aqui, estamos usando banco de dados de e-shop no exterior. Então essa coisa muito grande e exatamente como estávamos tendo o aplicativo no local e também, ele vai fazer como monitoramento para a nossa API. Então, quando eu chamo essa API, então eu vou para os logs. Vou ver que, ok, temos informações Obter produtos API v1 e algumas outras informações sobre a solicitação e devolução e quanto tempo levou. Mas se formos ao banco de dados, precisamos, por exemplo, verificar uma imagem. Então eu vou aqui e eu vou para o banco de dados e eu tenho produtos. Teremos um problema com as imagens. Então, se você se lembra, nós carregamos algumas imagens com o nosso e-sharp. Então, quando eu for aqui, eu vou ver que no produto, eles ainda têm este localhost 3000. Infelizmente, isso não é possível substituí-lo. Então você precisa substituir todas as cadeias de caracteres que estão relacionadas com o host local. Você precisa substituí-los anualmente pelo link que é fornecido para sua aplicação. Então, nesse caso, eu vou aqui para a minha aplicação e, em seguida, copiar esta parte que é daqui para.com. Então eu vou copiar tudo isso. E então irei para aquele campus de novo. E que ele reproduz de HTTP para localhost. Além disso, a porta não é necessária e, em seguida, vou adicionar atualização ou atualizar esta parte aqui. Então, clicamos em Atualizar e, em seguida, ele será atualizado. Então, quando eu vou agora para o aplicativo e colar o URL da imagem, então eu serei capaz de ver a imagem com sucesso. Caso contrário, todas as imagens, infelizmente, eles ainda estão no localhost 3000. Até agora que com base no seu nome de seu aplicativo, você precisará substituir tudo isso para o banco de dados. Claro, depois de usarmos este banco de dados, por exemplo, em algum front-end ou quando estamos indo para usar Postman, por exemplo, quando eu vou postar um produto usando este URL API, ele irá carregar a imagem com base nesse URL, para que ele será armazenado no banco de dados assim. Mas como estávamos usando esse banco de dados em desenvolvimento, você precisa fazer isso manualmente. Porque também, estávamos usando quando estamos publicando um produto. Se você se lembrar, se formos para postar o produto e no produto pós estávamos fazendo como a imagem usando o host. Eu recebo o host atual e, em seguida, colocar o resto aqui para armazenar o caminho da imagem. Assim, o host será retirado do host que você está usando e chamando a API de. Então, nesse caso, você não precisa se preocupar com os links que queremos enviar para os arquivos enviados. Então agora temos uma API totalmente funcional no servidor. O aplicativo foi implantado. Claro, se você quiser remover este Heroku.com e criar seu próprio domínio, não é de graça. Você tem que pagar por isso. E, claro, você pode tê-lo sob seu próprio domínio. Então, no aplicativo front-end ou em qualquer aplicativo front-end, quando você estiver indo para implantar o aplicativo front-end, não sua API Web. Você pode dizer que para o meu aplicativo no front-end em produção, use este URL API para todos como o aplicativo. E então, quando seu aplicativo for implantado, ele se conectará a essa API e capturará os dados de lá.