Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!