Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

168
Visualizações
ExpressJs middlewares gets executed on app start

I have the following code:

const app = require("express")();

const middleware = (obj) => (req, res, next) => {
  next();
};

app.get(
  "/users",
  middleware({
    id: req.login.id,
  })
);

app.listen(9999, () => console.log("test running on port 9999"));


When I run the app it gives the following error:

ReferenceError: req is not defined

I know that req is not defined in the middleware, but, my question is, who runs the middleware before even sending any request (on app launch).

why it gets fired? who invokes it? and how to prevent that?

If you have this code, for example, no error will be thrown:

const y = (propName) => console.log(propName);
const x = () => y({ req: req.login.id });

because x is never called. but in my express app, why does it read req.login.id on app launch?

about 4 years ago · Santiago Gelvez
2 Respostas
Responde à pergunta

0

Según tengo entendido, tienes un error en la línea 10:

 app.get( // 7 "/users", // 8 middleware({ // 9 id: req.login.id, // 10 }) // 11 ); // 12

Hay una diferencia entre su código y su ejemplo: en su código, ejecutó app. get(...) , por lo que la función get(...) tiene sus propios argumentos. El segundo argumento es middleware(...) , que también es una función. La función de middleware (...) no tiene que ejecutarse, y tiene razón en eso, pero el middleware (...) también es un argumento (para la función principal), pero como función, debería definirse con sus propios argumentos. Significa que no puede poner allí lo que quiera dentro de los corchetes de la función de middleware (...) como argumentos. Tienes que poner allí solo cosas definidas. Por favor, no mezcle el comando javascript con la definición de la función . Entonces, la diferencia entre su código y su ejemplo dado es que en su ejemplo solo tiene algunas cosas no definidas en el cuerpo de la función, pero no como argumento. Puede estar seguro de eso, cuando escribirá su mismo ejemplo de otra manera, que es lo mismo:

 const y = (propName) => { // 1 console.log(propName) // 2 }; // 3 const x = () => { // 4 y({ req: req.login.id }) // 5 }; // 6

Como puede ver en la quinta línea, solo tiene algunas cosas en el cuerpo, por eso nunca se ejecutó, pero en su código tenía algunas cosas que se ejecutaron.

PD: vi alguna respuesta, así que pensé que podría ser útil escribir aquí un código alternativo también. Puede modificar su código de esta manera, donde el requisito se usa dentro del cuerpo del middleware:

 const app = require("express")(); const middleware = (obj) => (req, res, next) => { // use req.login.id here... next(); }; app.get("/users", middleware); app.listen(9999, () => console.log("test running on port 9999"));
about 4 years ago · Santiago Gelvez Relatório

0

Because you are calling a function to define the middleware. You should use it as shown below.

 const app = require("express")(); const middleware = (obj) => (req, res, next) => { const {login:{id}} = req.params; if(id){ // Things to do... } next(); }; app.get( "/users", middleware );
about 4 years ago · Santiago Gelvez Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda