#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
.