在我的代码中,我编写了这样的代码
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();
}
};
请帮助我理解。
答案 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
可以是回调数组,也可以是签名只是接受req
,res
和next
作为参数的回调的回调。因此,您也可以像这样使用
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:煮沸。
然后,轮到您了。喝!