2
respostas

[Reclamação] faltou explicação nesse "barril"

O Curso está excelente até aqui, porém esse barril que é o index mudou muito o local das coisas, as relação do app, rota e controllers que tava fazendo sentido agora virou do avesso e não estou conseguindo entender o que está acontecendo. por exemplo:

const routes = (app) => {
  app.route("/").get((req, res) => res.status(200).send("Curso de Node.js"));

};

porque um simples parâmetro possui um método chamado route de onde surgiu esse método nesse parâmetro? do mesmo modo o .get() com res e req é outro método que leva a resposta da requisição...

enfim nada ficou claro aqui.

2 respostas

Oi Geraldo! Tudo bem?

No Express, app é uma instância do servidor que você cria usando express(). Quando você vê app.route("/"), isso está criando uma rota para o caminho raiz (/). O método route é uma maneira de definir rotas de forma encadeada. Isso significa que você pode adicionar métodos HTTP como .get(), .post(), .put(), etc., de forma mais organizada.

Por exemplo, o código:

app.route("/").get((req, res) => res.status(200).send("Curso de Node.js"));

Está criando uma rota para o caminho raiz que responde a requisições GET com um status 200 e a mensagem "Curso de Node.js". O req e res são os objetos de requisição e resposta que o Express fornece para manipular as requisições HTTP.

O método get() é um dos métodos HTTP que você pode usar para definir o que acontece quando uma requisição GET é feita para essa rota específica. Da mesma forma, você poderia adicionar um .post() ou qualquer outro método HTTP que precise.

Aqui está um exemplo mais completo:

app.route("/livros")
  .get((req, res) => {
    // Lógica para lidar com GET /livros
  })
  .post((req, res) => {
    // Lógica para lidar com POST /livros
  });

Isso organiza suas rotas de uma maneira que fica mais fácil de ler e manter, especialmente quando você tem várias operações para o mesmo caminho.

Espero que isso ajude a esclarecer sua dúvida. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

@Geraldo,

infelizmente javascript não é uma linguagem tipada, mas se fosse, a declaração da função "routes" seria algo mais ou menos assim:

import { Application, Request, Response } from 'express';

const routes = (app: Application): void => {
  app.route('/').get((req: Request, res: Response) => { res.send('Curso de Node.js'); }); 
  // status(200) é desnecessário, pois é o status padrão quando não declarado
};

(acabei utilizando typescript para o exemplo ficar mais perto de um possível mundo real)

de cara fica mais claro, não? bem... eu acho que fica.

a questão é: observe que "tipando" fica claro que o 'app' não é um simples parâmetro: é um parâmetro que espera um objeto do tipo Application - e é o que vc acaba passando ao invocar routes(app) no app.js, pois em app.js foi declarado const app = express() (vc criou e atribuiu uma instancia de Application à variável app)

é por isso que o "parâmetro" app (que é do tipo Application) tem um método route() que, por sua vez, retorna um objeto Router que tem o método get()

quer dizer, o parâmetro em si não tem algo, mas, quando a função routes(app) é invocada, aí o valor que o parâmetro recebe é um objeto do tipo Application com propriedades e métodos.

já viu o básico de javascript? talvez uma revisada te ajude...

obs: não tente utilizar o as declarações typescript no teu projeto javascript

obs: é possível também se valer de "type annotations" (JSDoc) diretamente nos arquivos .js, mas fui de typescript no exemplo porque é bem mais simples de entender mesmo sem ter conhecimento algum de typescript.