我想知道在第一种情况下,返回的函数是作为中间件调用的,但在第二种情况下返回的函数没有被调用



CASE1。。。其中validatebody返回的函数(schemas.authschema(作为中间件执行。。。

router.route("/signup").post(validatebody(schemas.authschema),userscontrollers.signup);

我的第二个文件,它导出验证器的函数和模式。。。

module.exports={
validatebody:function(schema)
{
return function(req,res,next)
{
var result=joi.validate(req.body,schema);
if(result.error)
return res.status(400).json(result.error);

if(!req.value)
req.value={};

req.value['body']=result.value;
next();
}
},
schemas:{
authschema:joi.object().keys(
{
email:joi.string().email().required(),
password:joi.string().required()
})
}
};

现在是第二个案例。。。。在这种情况下,我不输出任何内容,页面会持续加载很长时间,因为函数名称第二个函数从未被调用,next((也从未被触发。。。。但在第一种情况下。。。调用了返回的函数。。

app.get("/users",firstfunction,secondfunction);

function firstfunction()
{
return function(req,res,next)
{
console.log(req);
next();
}
}
function secondfunction(req,res,next)
{
res.send("go there");
}

app.listen(3000);

您正在传入firstfunction,但没有调用它。您需要执行

app.get("/users",firstfunction(),secondfunction);

相关内容

最新更新