Промежуточное программное обеспечение узла для выполнения запроса API

#node.js #express #middleware

#node.js #экспресс #промежуточное программное обеспечение

Вопрос:

У меня есть файл маршрутов, который выглядит следующим образом,

 function getEmp(req,res,next,empId) {
    return(req, res, next) => {
        getEmpById(req, res, next, employerId);
    }
}

module.exports = {
   router.get('/go', getEmp('my-id'), (req, res) => {
   res.render('view.njk', { empDetails: res.local.empDetails});
});
 

Это работает так, как я ожидал бы, что вызов API выполняется, и данные отображаются в представлении, однако я не хочу, чтобы мое промежуточное программное обеспечение выполняло функцию в файле маршрутов, я хочу, чтобы это был отдельный файл, поэтому я переместил его в собственный файл,

 const { getEmpById } = require("ApiFile");

const setEmp = (employerId) => {
   return (req, res, next, employerId) => {
       getEmpById(employerId);
   }
}

module.exports = setEmp
 

Когда я извлекаю вышеуказанное в свой файл routes и использую его в качестве промежуточного программного обеспечения, промежуточное программное обеспечение даже не вызывается?

С функцией промежуточного программного обеспечения в отдельном файле мои маршруты выглядят следующим образом,

 const setEmp = require("../middleware/setEmp");

module.exports = {
       router.get('/go', setEmp('my-id'), (req, res) => {
       res.render('view.njk', { empDetails: res.local.empDetails});
    });
 

Я предполагаю, что я что-то делаю неправильно?

Комментарии:

1. Вызываете ли вы next() для запуска следующего промежуточного программного обеспечения?

2. Он запускается при моем вызове api

Ответ №1:

Измените реализацию setEmp file как:

 const { getEmpById } = require("ApiFile");

const setEmp = (employerId) => {
  return (req, res, next) => {
    getEmpById(employerId);
  }
}

module.exports = setEmp
 

т. е. удалить employerId в качестве четвертого параметра возвращаемой функции. Вы все равно можете передавать employerId в качестве аргумента getEmpById функции из-за Closures .