节点中的抽象(req,res,next)

时间:2018-03-07 17:46:05

标签: javascript node.js

说我有路线:

app.get(abc, (req, res, next) => {
    if (req.params.ID === undefined) { 
        res.status(400); 
        res.end(); 
    }
    next();
});

我想知道如果我将if语句抽象到另一个文件中,这是否会起作用:

let undefinedID = (req, res, next) => {
    if (req.params.ID === undefined) {
        res.status(400); 
        res.end();
    }
    next();
}

module.exports = {undefinedID};

然后调用我的路线中的函数:

const reqConditionals = require('path/to/fxn');

app.get(abc, () => {
    reqConditionals.undefinedID();
});

我想这样做的原因是因为我有很多具有类似请求条件和响应的路由,并且想要开始重构它。所以,如果我这样做,它的工作方式是否相同?

1 个答案:

答案 0 :(得分:2)

是的,你可以这样做。但是你这样做:

const reqConditionals = require('path/to/fxn');

app.get(abc, reqConditionals.undefinedID);

然后您可以拥有实际路线。

app.get(abc, reqConditionals.undefinedID);
app.get(abc, (req, res, next) => {
  //here you know that the id is not undefined cause the previous middleware let you reach here.
});

此外,您可以将它应用于数组或其他任何函数并具有多个函数。

app.get([abc, def], reqConditionals.undefinedID, reqConditionals.undefinedFoo, reqConditionals.undefinedBar);