4

我正在使用节点 js/Express 编写一个大程序(大小)。

我有多个 app.post 功能和所有。因此,他们中的大多数需要对即将到来的请求进行验证并发送响应。

因此,我创建了一个名为 Validate(); 的函数;如果验证失败,我将发送回复告诉“请再次尝试验证失败的信息”。

所以,我创造了

function validate() { ...}

在里面

app.post('/',function(req,res){
...

validate();
}

req 中的所有必需参数我正在写入数据库,因此我可以访问任何地方,所以现在这不是问题。问题是:如何发送“res”对象。如果我尝试调用 res. 现在写验证。它会抱怨它没有定义。

那么如何解决这个问题。

2)我试图在数据库中编写 validate() 的响应。之后我尝试调用 res: 即:

app.post('/',function(req,res){
...

validate();

res ..
}

由于节点是异步的,因此 res 不使用此功能验证响应。

有没有人遇到过这样的问题

4

1 回答 1

9

您应该将它们作为参数传递:

function validate(req, res) {
    // ...
}
app.post('/', function (req, res) {
    validate(req, res);

    // ...
});

您还可以将其定义为自定义中间件,next当请求被认为有效时调用第三个参数,并将其app.post作为另一个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 中的错误处理也可能对next(err).

于 2012-12-17T05:43:15.027 回答