首页 > 解决方案 > 节点中间件发出 API 请求

问题描述

我有一个看起来像这样的路由文件,

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

当我将上述内容拉入我的路由文件并将其用作中间件时,甚至不会调用中间件吗?

使用单独文件中的中间件功能,我的路线看起来像这样,

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

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

我假设我做错了什么?

标签: node.jsexpressmiddleware

解决方案


将文件的实现更改setEmp为:

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

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

module.exports = setEmp

即,删除employerId作为返回函数的第四个参数。employerId由于. _ getEmpById_Closures


推荐阅读