我正在使用node Express作为我的后端应用程序。 我写了一个方法,从快速请求对象获取一些输入。该方法通过res.write(...)进行一些检查并将消息写入响应对象。在所有检查结束时,我调用res.end();到现在为止还挺好。 我的一些检查需要mongodb访问,因此我必须使用回调。这是一些代码:
app.post("/addUser", function (req, res) {
expdb.unique({ "email": req.body.email }, function (isUnique) {
if (!isUnique) {
res.write("email error");
}
})
expdb.unique({ "_id": req.body.user }, function (isUnique) {
if (!isUnique) {
res.write("user error");
}
})
/* -- below here everything works fine -- */
if (req.body.user.length < 3 || req.body.user.length > 20) {
res.write("username to short ...or to long");
}
/* -- ... more working code -- */
res.end();
});
前两个响应完全被忽略。 我很确定这里会发生一些时髦的回调魔法,但我无法弄清楚如何做到这一点。 我尝试了类似下面的内容,以确保回调知道响应对象,但它也失败了:
expdb.unique({"_id": req.body.user}, function(result, respond) {
if(!result) {
respond.write("user error")
}
}, res)
可能有人帮我这个。
感谢 -Dirk
答案 0 :(得分:1)
如评论中所述,以下内容应该有效
var theEnd = function(response){
if (req.body.user.length < 3 || req.body.user.length > 20) {
res.write("username to short ...or to long");
}
/* -- ... more working code -- */
res.end();
};
app.post("/addUser", function (req, res) {
expdb.unique({ "email": req.body.email }, function (isUnique) {
if (!isUnique) {
res.write("email error");
}
theEnd(res);
})
expdb.unique({ "_id": req.body.user }, function (isUnique) {
if (!isUnique) {
res.write("user error");
}
theEnd(res);
})
答案 1 :(得分:0)
感谢卡尔曼,我终于做对了。以下是寻找它的人的工作代码:
app.post("/addUser", function (req, res) {
expdb.unique({ "email": req.body.email }, function (uniqueEmail) {
if (!uniqueEmail) {
res.write("Email in use\n");
}
expdb.unique({ "_id": req.body.user }, function (uniqueUser) {
if (!uniqueUser) {
res.write("Username in use\n");
}
if (req.body.user.length < 3 || req.body.user.length > 20) {
res.write("username to short ...or to long\n");
}
/* -- other validations --*/
res.end();
});
});
});