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