Node.js post方法中的第二个参数是什么

时间:2019-02-09 16:13:41

标签: javascript node.js express

在我的代码中,我编写了这样的代码

 router.post('/', publicShare, function(req, res, next) {

我签入了documents却找不到为什么第二个参数publicShare在这里?

publicShare看起来像

var publicShare = function(req, res, next) {
    if (condition1) {
        if (condition2) {
            res.status(400).send({success:false});
        } else {
            next();       
        }
    } else {
        if (condition3) {
            res.status(401).send({success:false});
        } else
            next();
    }
};

请帮助我理解。

3 个答案:

答案 0 :(得分:3)

路由中的

publicShare方法是一个明确的中间件功能。根据文档

  

中间件功能是可以访问请求的功能   对象(req),响应对象(res)和下一个中间件   在应用程序的请求-响应周期中发挥作用

中间件检查要应用于您的请求和响应对象的某些条件或条件,如果条件满足,则完成下一个操作

  

1-结束请求响应周期

     

2-调用堆栈中的下一个中间件函数。

您可以参考文档以获取更多信息-https://expressjs.com/en/guide/using-middleware.html

答案 1 :(得分:1)

根据documentation,您可以添加由逗号分隔的多个中间件功能。 “ publicShare”变量必须是中间件功能。

答案 2 :(得分:1)

您可以检查route handlers,它接受​​的回调数组就像一个中间件。来自文档的示例:

app.get('/example/d', [cb0, cb1], function (req, res, next) {

因此,在您的情况下,publicShare可以是回调数组,也可以是签名只是接受reqresnext作为参数的回调的回调。因此,您也可以像这样使用

app.get('/', function(req, res, next){}, function(req, res, next){}, ...

为了简单起见,您将使用一系列回调:

app.get('/',[cb1, cb2, cb3])

其中cb1,cb2和cb3是带有请求,响应和下一个参数的回调。它允许您一个一个地运行。 cb1->执行日志1,然后cb2->执行日志2,cb3->执行日志3,依此类推。

我将通过一个示例来简化此操作:

您要喝水。

1)cb1:购买一罐水。

2)cb2:在水桶或广口瓶中加入几滴水。

3)cb3:煮沸。

然后,轮到您了。喝!