‫Instrutor: Bem-vindo de volta.
‫Espero que você esteja gostando desta seção até agora e de
‫trabalhar com o Node. js.
‫Então, vamos agora prosseguir em nosso
‫projeto e construir uma API da web extremamente simples.
‫Agora, para começar, o que realmente é uma API?
‫Bem, a resposta longa, você
‫aprenderá em uma das próximas seções, mas por enquanto, a resposta
‫curta, pelo menos neste contexto de APIs da web, basicamente,
‫uma API é um serviço do qual podemos solicitar alguns dados, então,
‫neste caso, os dados que o usuário deseja solicitar são
‫dados sobre os produtos que estamos
‫oferecendo neste farm de nós, portanto, neste projeto.
‫Então, eu tenho aqui esta pasta dev-data, e ali, eu tenho
‫um arquivo JSON, e JSON, caso você não saiba, é um formato
‫de texto muito simples que se
‫parece muito com o objeto JavaScript, então
‫se parece com isto , e podemos ter arrays,
‫o que realmente temos, então temos um grande
‫array, que contém esses cinco objetos, e cada objeto
‫tem o ID, o nome do produto, a imagem e
‫assim por diante.
‫Agora, cada um deles deve ser uma string para cada uma das
‫chaves, e então temos o valor.
‫Então, basicamente, esses dados aqui são o que nossa API
‫enviará ao cliente quando solicitado.
‫Portanto, teremos mais uma rota aqui.
‫Bem aqui, senão se o nome do caminho for igual a / api.
‫E, por enquanto, como um espaço reservado, vamos simplesmente enviar a
‫API de volta assim.
‫Portanto, o que queremos fazer agora é realmente ler os
‫dados desse arquivo aqui, analisar JSON em JavaScript e, em seguida, enviar
‫o resultado de volta ao cliente.
‫Então algo muito simples e vamos trabalhar.
‫Portanto, a primeira abordagem para fazer isso
‫é vir por esse caminho e, em seguida, ler o arquivo aqui
‫usando a função de leitura de arquivo, certo?
‫Então, vamos começar fazendo isso.
‫Então fs. , e é realmente readFile,
‫não fileRead, portanto readFile e, em seguida, o nome do arquivo.
‫Agora, lembre-se de como eu disse a você
‫anteriormente que esta não é a única maneira de localizar nosso
‫arquivo no sistema de arquivos.
‫Por enquanto, vamos realmente usá-lo ainda, mas
‫depois de escrever aqui, vou mostrar
‫a você outra maneira.
‫Portanto, uma observação, este ponto aqui na verdade se refere ao diretório a partir
‫do qual executamos o comando node no terminal.
‫Então, novamente, este ponto aqui
‫agora representa esta pasta atual aqui porque é
‫onde realmente executamos o comando node, portanto, nesta pasta de farm de
‫1 nó, que é nosso diretório de
‫trabalho atual de qualquer maneira neste caso, mas poderíamos ter
‫execute o comando do nó em outro
‫lugar, e então o ponto significaria outra coisa.
‫Assim, por exemplo, poderíamos encontrar perfeitamente, ir para a área de trabalho
‫e executar o nó lá e, em seguida, especificar
‫todo o caminho para indexar. js, mas poderíamos fazer isso, mas
‫nesse caso, o ponto significaria a área de trabalho, então se começássemos o
‫script a partir da área de trabalho,
‫então este aqui, este ponto, significaria a
‫área de trabalho, e isso nem sempre é ideal e,
‫portanto, existe uma maneira melhor.
‫Então, tudo Node. scripts js,
‫eles obtêm acesso a uma variável chamada dirname, e
‫essa variável sempre traduz para o diretório no qual
‫o script que estamos executando atualmente está localizado.
‫Portanto, neste caso, é realmente o mesmo
‫lugar porque o índice. js também está nesta
‫pasta de farm de nós, mas, novamente, pelos
‫motivos que mencionei antes, muitas vezes
‫é uma prática melhor usar a variável dirname, então vamos fazer
‫isso e, para isso, criamos uma
‫string de modelo e, em
‫seguida, usamos a variável, portanto, é __dirname, que significa nome do diretório.
‫E então, normalmente, fazemos assim.
‫Agora, há uma exceção a
‫essa regra, que é a função require.
‫Então, ao exigir módulos,
‫podemos exigir nossos próprios módulos, e faremos isso
‫um pouco mais tarde, como no
‫próximo, ou em um dos próximos dois vídeos, e
‫lá, o ponto também significa o funcionamento atual diretório e não o
‫local de onde estamos executando o script.
‫Portanto, lembre-se de que a função require é uma
‫exceção a essa regra, mas geralmente,
‫o ponto é onde o
‫script está sendo executado e __dirname é onde o arquivo atual está localizado.
‫Certo, agora vamos especificar a codificação do arquivo utf-8 e, em
‫seguida, nossa função de retorno de chamada, que é o
‫erro primeiro, lembre-se, e agora temos acesso a esses dados.
‫Agora os dados estão em JSON e, portanto, em JavaScript, temos
‫algo integrado que se chama JSON. parse.
‫E então isso pegará o código
‫JSON, que na
‫verdade é uma string, e o transformará automaticamente em JavaScript, ou
‫seja, um objeto ou array JavaScript neste caso.
‫Vamos chamá-lo de productData
‫e também rapidamente dar uma olhada nele.
‫Portanto, no console, neste caso.
‫Então, reiniciando o servidor, e agora, não se esqueça de
‫acertar a rota / api, e oh, o que está acontecendo aqui?
‫Oh, realmente reiniciámos o servidor.
‫E agora temos uma
‫API de resposta e vamos dar uma olhada
‫aqui, na verdade, no objeto de dados do produto.
‫Portanto, este é apenas um objeto legal, com todos
‫os dados que tínhamos nesses dados. arquivo json.
‫Tudo bem, agora a próxima etapa é enviar de
‫volta esses dados como a resposta.
‫Agora, esta resposta. O método end
‫aqui realmente precisa enviar de volta uma string e não um objeto aqui.
‫E, de fato, o que queremos enviar
‫de volta são os dados diretamente, então os dados são uma string que transformamos
‫em um objeto usando JSON. analisar, mas por
‫enquanto, não precisaríamos fazer isso, mas eu fiz mesmo
‫assim, porque precisaremos disso mais tarde,
‫quando começarmos a construir nossos modelos HTML.
‫Então é aí que vamos precisar
‫desses dados em formato JavaScript.
‫Por enquanto, queremos apenas enviar de volta a string
‫real que recebemos.
‫Agora, antes de podermos fazer isso, precisamos realmente
‫especificar, então precisamos dizer
‫ao navegador que estamos enviando JSON de volta, então, assim como antes, onde
‫definimos o tipo de conteúdo como text / html, agora
‫precisamos dizer a um navegador que estamos enviando JSON.
‫Portanto, dizemos res. writeHead como antes, e
‫agora estamos usando o código de status
‫200, que significa okay, e então o objeto dos cabeçalhos.
‫Neste caso, será apenas um, então
‫Content-type, e quando enviarmos JSON, precisamos dizer application / json.
‫Então, para HTML, é text / html, para
‫JSON, é application / json,
‫e vamos agora dar uma olhada nisso.
‫Recarregue o servidor aqui muito rápido e,
‫de fato, aqui temos nossa API enviando de volta todos os dados
‫sobre nossos cinco produtos.
‫Tão incrível, isso é ótimo, e é ótimo, mas na verdade
‫não é perfeito, porque não
‫é realmente 100% eficiente, e isso porque
‫cada vez que alguém acessa esta rota / api,
‫o arquivo terá que ser lido e enviado
‫de volta .
‫Em vez disso, o que podemos fazer é apenas ler
‫o arquivo uma vez no início e, em seguida, cada vez
‫que alguém acessar essa rota, simplesmente enviar de
‫volta os dados sem ter que lê-los cada vez que um usuário solicitar.
‫Isso faz sentido?
‫Bem, o que vou fazer é colocar isso aqui.
‫Ok, claro, eu não preciso de tudo isso, então isso
‫não está aqui, e isso não
‫está aqui, e na
‫verdade, será um pouco diferente, porque agora
‫usaremos a versão síncrona, e eu sei o que você
‫está pensando, que é que a
‫versão síncrona bloqueia a execução do código, certo?
‫E embora isso seja verdade, neste
‫caso, não é um
‫problema, porque o código de nível
‫superior, na verdade, só é executado uma vez logo no início.
‫Só essa função de callback, por exemplo, aqui,
‫a função createServer, então essa função aqui, é a que é
‫executada toda vez que há uma
‫nova solicitação, mas não um código que está por aqui.
‫O código que está fora das funções
‫de retorno de chamada, então o chamado código de nível superior,
‫só é executado uma vez que iniciamos o programa, e
‫nessa situação, não importa se ele bloqueia a
‫execução, porque novamente, isso acontece apenas
‫uma vez e apenas quando o código realmente inicia, certo?
‫Faz sentido?
‫E então vamos usar a versão de sincronização agora
‫porque é realmente mais fácil lidar com
‫esses dados, porque isso simplesmente coloca os dados em uma variável
‫que não podemos usar imediatamente.
‫Portanto, não se preocupe com o fato de que essa função está bloqueando
‫porque, novamente, ela está no código de nível
‫superior e só é executada uma vez.
‫O segredo aqui é simplesmente
‫saber qual código é executado apenas uma vez e
‫apenas no início e qual código é executado continuamente
‫e, portanto, é problemático ao bloquear o loop de eventos.
‫E, claro, durante
‫o resto deste grande, grande curso, você aprenderá isso.
‫Portanto, você aprenderá tudo sobre o loop de eventos,
‫e qual código está bloqueando e qual não está, e por quê,
‫e esta é apenas a primeira vez que menciono isso,
‫mas não será a última vez.
‫Você vai me ouvir dizendo as mesmas coisas indefinidamente.
‫Então, basta chamar esse dado e, claro, não precisamos
‫de nada disso.
‫Vamos apenas mover isso aqui para fora, e é isso.
‫Portanto, antes que qualquer coisa aconteça, ele lerá os
‫dados do arquivo JSON nos dados.
‫Em seguida, ele também analisará isso em um objeto.
‫Vamos chamá-lo de dataObject aqui e, portanto, o que faremos aqui
‫é não ler esse arquivo toda vez que houver
‫uma solicitação e, em vez disso, simplesmente
‫enviar de volta os dados que temos agora em nosso código de
‫nível superior.
‫Portanto, esses dados vêm daqui porque, é claro, esse código na função
‫de retorno de chamada tem acesso
‫ao código de nível superior por causa da cadeia de escopo, certo?
‫Cancelando, executando novamente e apenas para provar
‫que ainda funciona, e funciona.
‫Tão perfeito, e isso é melhor, é mais eficiente, oh, e
‫por que fechei isso?
‫Tudo bem, vamos abri-lo novamente muito rápido.
‫Aqui vamos nos.
‫Essa é nossa API muito simples, que agora permite ao usuário
‫simplesmente solicitar todos os dados sobre nosso aplicativo com
‫uma única chamada de API, basicamente.
‫Então, adicionamos outra rota aqui, / api,
‫então lemos o arquivo de forma
‫síncrona, colocamos neste objeto e, em seguida, simplesmente enviamos
‫de volta esse objeto como uma resposta, mas
‫antes disso, especificamos que estamos enviando de volta o aplicativo / json, então
‫que o navegador saiba exatamente o que esperar e, nos
‫próximos vídeos, começaremos
‫a construir a interface do usuário, então
‫essa é a parte mais empolgante, certo?