【问题标题】:Node middleware to make an API request节点中间件发出 API 请求
【发布时间】:2021-03-18 17:16:10
【问题描述】:

我有一个如下所示的路由文件,

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});
    });

我认为我做错了什么?

【问题讨论】:

  • 您是否调用next() 来运行下一个中间件?
  • 它在我对 api 的调用中运行

标签: node.js express middleware


【解决方案1】:

setEmp文件的实现改成:

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

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

module.exports = setEmp

即,将employerId 作为返回函数的第四个参数删除。由于Closures,您仍然可以将employerId 作为参数传递给getEmpById 函数。

【讨论】:

    猜你喜欢
    • 2016-12-12
    • 2017-08-09
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多