【发布时间】:2017-10-28 13:48:10
【问题描述】:
作为 web 开发的初学者,我正在使用纯 node.js 构建我的第一个 web 应用程序。 在注册部分,表单数据将从客户端发布到服务器,然后添加到数据库中。成功后,客户端将根据收到的响应来操作 DOM。但是,成功回调总是在响应发送之前触发。
客户端代码:
$.post('/register.db', {
data: JSON.stringify(user),
contentType: "application/json",
dataType: "text",
success: function(data){
alert(data);
if(response == register.exists){
$(".login-form>input:nth-child(3)").append("<span>This email has already been used</span>");
}
else if(response == register.success){
$(".login-wrapper>span").html("Proceed to login");
$(".register-wrapper").html("");
}
}
});
服务器端代码:
var body = "";
req.on("error", function(){
handleError();
}).on("data", function(chunk){
body += chunk;
}).on("end", function(){
// success callback is fired as soon as request ends
// code afterwards is executed after success callback
// but response is written in db.register() function
var user = JSON.parse(qs.parse(body).data);
console.log("user ",user);
res.on('error', function(err){
handleError();
});
db.register(res, user);
});
---编辑:添加数据库代码---
数据库代码:
register:
function(res, user){
var account = user['email'];
client.sismember('users', account, function(err, response){
res.statusCode = 200;
res.setHeader('Content-type', 'text/plain');
// account already exists
if(response != 0){
res.write(register.exists);
res.end();
return;
}
client.sadd("users", account);
client.hmset(account, "pin", user.pin, "first_name", user.first_name, "last_name", user.last_name);
res.write(register.success);
res.end();
return;
});
}
哪位好心人能指出我哪里出错了吗?我会很感激的!!
【问题讨论】:
-
服务器代码中没有显示任何内容。建议大家多学习教程
-
嗨 charlietfl,为了清楚起见,我只是注释掉了将数据发送到数据库的部分。问题就像我说的,只要请求结束就会触发成功回调,无论之后发生什么。
-
如果成功触发,则表示请求已完成。如果成功的数据是空的……那是因为没有发送。
-
我编辑了问题描述。在服务器端代码中,
console.log("user ",user);在成功回调之后执行,这意味着在成功之前写入响应的db.register()甚至没有运行。
标签: javascript jquery node.js ajax post