Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Construindo o Endpoint GET para Todos os Posts | Construindo APIs REST com Node.js e Express.js
Desenvolvimento Backend com Node.js e Express.js

bookConstruindo o Endpoint GET para Todos os Posts

Vamos explorar como implementar a rota "GET ALL POSTS" no arquivo postsRoutes.js. Esta rota recupera uma lista de todas as postagens da fonte de dados (database/posts.json) e as envia como resposta para o cliente.

Importação dos Módulos e Dependências Necessárias

No início do arquivo, são importados os módulos e dependências necessários:

const express = require("express");
const fs = require("fs/promises");
const validatePostData = require("../middlewares/validateData");
  • express: Importação do framework Express para construção das rotas;
  • fs/promises: Este módulo fornece operações assíncronas de arquivos, utilizado para leitura de dados de um arquivo JSON;
  • validatePostData: Embora não seja utilizado nesta rota, o middleware validatePostData é importado, sendo útil para validação de dados em capítulos posteriores.

Inicialização de um Router do Express

Inicialização de uma instância de um router do Express, responsável por gerenciar todas as rotas definidas neste arquivo:

const router = express.Router();

Criação de uma Função para Leitura de Dados

Definição de uma função assíncrona chamada readData para ler dados de um arquivo JSON. Esta função garante a recuperação adequada dos dados e realiza o tratamento de erros:

// Function to read data from the JSON file
async function readData() {
  try {
    // Read the contents of the `posts.json` file
    const data = await fs.readFile("./database/posts.json");
    // Parse the JSON data into a JavaScript object
    return JSON.parse(data);
  } catch (error) {
    // If an error occurs during reading or parsing, throw the error
    throw error;
  }
}
  • fs.readFile: Utilização de fs.readFile para ler o conteúdo do arquivo ./database/posts.json;
  • JSON.parse: Os dados obtidos do arquivo são convertidos para um objeto JavaScript;
  • Tratamento de Erros: Caso ocorram erros durante a leitura ou conversão, eles são capturados e o erro é lançado.

Definição da Rota "GET ALL POSTS"

Definição da rota "GET ALL POSTS" dentro do router:

// GET ALL POSTS
router.get("/", async (req, res, next) => {
  try {
    // Call the `readData` function to retrieve the list of posts
    const data = await readData();
    // Send the retrieved data as the response
    res.status(200).send(data);
  } catch (error) {
    // If an error occurs during data retrieval or sending the response
    console.error(error.message); // Log the error to the console for debugging
  }
});

Definição da Rota: Especificação de que esta rota trata requisições HTTP GET para o caminho raiz (/).

Manipulador da Rota: Dentro da função manipuladora da rota:

  • Chamada da função readData para obter a lista de posts do arquivo JSON;
  • Em caso de sucesso na obtenção dos dados, envio dos dados como resposta utilizando res.send(data);
  • Caso ocorram erros durante o processo, captura do erro, registro no console para depuração (console.error(error.message)) e continuidade.

Código completo do arquivo postsRoutes.js neste passo

const express = require("express");
const fs = require("fs/promises");
const validatePostData = require("../middlewares/validateData");

const router = express.Router();

// Function to read data from the JSON file
async function readData() {
  try {
    // Read the contents of the `posts.json` file
    const data = await fs.readFile("./database/posts.json");
    // Parse the JSON data into a JavaScript object
    return JSON.parse(data);
  } catch (error) {
    // If an error occurs during reading or parsing, throw the error
    throw error;
  }
}

// GET ALL POSTS
router.get("/", async (req, res, next) => {
  try {
    // Call the `readData` function to retrieve the list of posts
    const data = await readData();
    // Send the retrieved data as the response
    res.status(200).send(data);
  } catch (error) {
    // If an error occurs during data retrieval or sending the response
    console.error(error.message); // Log the error to the console for debugging
  }
});

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 5

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain how error handling works in this route?

What would be the next step to add more routes, like "GET POST BY ID"?

How does the readData function handle missing or corrupted JSON files?

Awesome!

Completion rate improved to 2.56

bookConstruindo o Endpoint GET para Todos os Posts

Deslize para mostrar o menu

Vamos explorar como implementar a rota "GET ALL POSTS" no arquivo postsRoutes.js. Esta rota recupera uma lista de todas as postagens da fonte de dados (database/posts.json) e as envia como resposta para o cliente.

Importação dos Módulos e Dependências Necessárias

No início do arquivo, são importados os módulos e dependências necessários:

const express = require("express");
const fs = require("fs/promises");
const validatePostData = require("../middlewares/validateData");
  • express: Importação do framework Express para construção das rotas;
  • fs/promises: Este módulo fornece operações assíncronas de arquivos, utilizado para leitura de dados de um arquivo JSON;
  • validatePostData: Embora não seja utilizado nesta rota, o middleware validatePostData é importado, sendo útil para validação de dados em capítulos posteriores.

Inicialização de um Router do Express

Inicialização de uma instância de um router do Express, responsável por gerenciar todas as rotas definidas neste arquivo:

const router = express.Router();

Criação de uma Função para Leitura de Dados

Definição de uma função assíncrona chamada readData para ler dados de um arquivo JSON. Esta função garante a recuperação adequada dos dados e realiza o tratamento de erros:

// Function to read data from the JSON file
async function readData() {
  try {
    // Read the contents of the `posts.json` file
    const data = await fs.readFile("./database/posts.json");
    // Parse the JSON data into a JavaScript object
    return JSON.parse(data);
  } catch (error) {
    // If an error occurs during reading or parsing, throw the error
    throw error;
  }
}
  • fs.readFile: Utilização de fs.readFile para ler o conteúdo do arquivo ./database/posts.json;
  • JSON.parse: Os dados obtidos do arquivo são convertidos para um objeto JavaScript;
  • Tratamento de Erros: Caso ocorram erros durante a leitura ou conversão, eles são capturados e o erro é lançado.

Definição da Rota "GET ALL POSTS"

Definição da rota "GET ALL POSTS" dentro do router:

// GET ALL POSTS
router.get("/", async (req, res, next) => {
  try {
    // Call the `readData` function to retrieve the list of posts
    const data = await readData();
    // Send the retrieved data as the response
    res.status(200).send(data);
  } catch (error) {
    // If an error occurs during data retrieval or sending the response
    console.error(error.message); // Log the error to the console for debugging
  }
});

Definição da Rota: Especificação de que esta rota trata requisições HTTP GET para o caminho raiz (/).

Manipulador da Rota: Dentro da função manipuladora da rota:

  • Chamada da função readData para obter a lista de posts do arquivo JSON;
  • Em caso de sucesso na obtenção dos dados, envio dos dados como resposta utilizando res.send(data);
  • Caso ocorram erros durante o processo, captura do erro, registro no console para depuração (console.error(error.message)) e continuidade.

Código completo do arquivo postsRoutes.js neste passo

const express = require("express");
const fs = require("fs/promises");
const validatePostData = require("../middlewares/validateData");

const router = express.Router();

// Function to read data from the JSON file
async function readData() {
  try {
    // Read the contents of the `posts.json` file
    const data = await fs.readFile("./database/posts.json");
    // Parse the JSON data into a JavaScript object
    return JSON.parse(data);
  } catch (error) {
    // If an error occurs during reading or parsing, throw the error
    throw error;
  }
}

// GET ALL POSTS
router.get("/", async (req, res, next) => {
  try {
    // Call the `readData` function to retrieve the list of posts
    const data = await readData();
    // Send the retrieved data as the response
    res.status(200).send(data);
  } catch (error) {
    // If an error occurs during data retrieval or sending the response
    console.error(error.message); // Log the error to the console for debugging
  }
});

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 5
some-alt