我无法在内部函数中赋值结果。有什么办法吗? 我可以在函数内控制日志结果变量。有人建议我做承诺。我不知道该怎么做。我是节点和表达的初学者。
router.post("/register",function(req,res){
var firstName = req.body.firstName;
var lastName = req.body.lastName;
var email = req.body.email;
var mobile = req.body.email;
var oauthProvider = req.body.oauthProvider;
var oauthId = req.body.oauthId;
var userType = req.body.type;
if (userType === undefined) {
userType = 1;
}
var result = {};
result.message = "Not edited";
connection.model.query("SELECT `id` FROM `users`" + "WHERE users.email = ?",[email],function(err,rows){
if(err !== null )
{
result.error = err;
result.success = false;
} else if(rows.length >= 1){
result.success = false;
result.message ="User already exists" ;
}
else
{
connection.model.query("INSERT INTO `users`(`first_name`,`last_name`,`email`,`mobile`,`password`,`user_type`) VALUES (?,?,?,?,?,?)",[firstName,lastName,email,mobile,password,userType],function(err,res){
if(err !== null )
{
result.error = err;
result.success = false;
}else{
var user = {
id : res.insertId,
first_name : firstName,
email : email
};
connection.model.query("INSERT INTO `users_profile`(`user_id`) VALUES (?)",[user.id],function(err,profileres){
if(err !== null )
{
result.error = err;
result.success = false;
}else{
if(oauthProvider != undefined && oauthId != undefined){
connection.model.query("INSERT INTO `users_oauth`(`user_id`, `provider`, `provider_uid`) VALUES (?,?,?)",[user.id,oauthProvider,oauthId],function(err,oauthres){
if(err !== null )
{
result.error = err;
result.success = false;
result.message = "couldn't create oauth user";
}
});
}
var token = jwt.sign(user, SECRET, {
expiresIn: "15d" // expires in 15 days
});
// return the information including token as JSON
result.success = true;
result.message = 'successfully registered';
result.token = token;
}
});
}
});
}
res.setHeader('content-type','text/json');
res.send(json_encode(result));
});
});
答案 0 :(得分:1)
U应该在回调中发送响应,如下所示:
result.success = true;
result.message = 'successfully registered';
result.token = token;
res.setHeader('content-type','text/json');
res.send(json_encode(result));
而不是在回调之外发送响应。
编辑: 好吧,我得到它..它接受你的查询res,所以更改代码如下:
router.post("/register",function(httpreq,httpres){
result.success = true;
result.message = 'successfully registered';
result.token = token;
httpres.setHeader('content-type','text/json');
httpres.send(json_encode(result));
编辑:如你所知,node.js将异步执行所有,所以在你的情况下,你发送响应res.send b4回调完成。所以现在在我的代码中,我在回调结束后发送了res ..