我正在使用节点js / Express编写一个大型程序(大小)。
我有多个app.post功能和所有功能。 所以,他们中的大多数都需要对即将到来的请求进行验证并发送回复。
所以,我创建了一个名为Validate()的函数; 如果验证失败,我会发送回复告诉“请再次尝试验证失败的信息”。
所以,我创建了
function validate() { ...}
中的
app.post('/',function(req,res){
...
validate();
}
请求中的所有必需参数我正在写入数据库,因此我可以访问任何地方,这样就不会出现问题了。 问题是: 如何发送“res”对象。 如果我尝试呼叫res,请立即写入验证。它会抱怨它没有定义。
所以如何解决这个问题。
2)我尝试在DB中编写validate()的响应。 然后我试着打电话给res:那就是:
app.post('/',function(req,res){
...
validate();
res ..
}
由于节点是asyc,因此res函数不使用此函数验证响应。
有任何人遇到像这样的问题
答案 0 :(得分:5)
你应该将它们作为参数传递:
function validate(req, res) {
// ...
}
app.post('/', function (req, res) {
validate(req, res);
// ...
});
您还可以将其定义为自定义中间件,在请求被视为有效时调用第三个参数next
并将其传递给app.post
as another callback
:
function validate(req, res, next) {
var isValid = ...;
if (isValid) {
next();
} else {
res.send("please try again");
}
}
app.post('/', validate, function (req, res) {
// validation has already passed by this point...
});
Express中的 Error handling对next(err)
也有用。