我第一次使用Node,并且在触发某个响应时遇到问题。在这种情况下,我正在检查用户名和pw是否与DynamoDB中的匹配。当用户名和密码与我的数据库不匹配时,它会重定向到我的页面,但是当它完成时,我的所有console.log输出都会打印两次(这显然与Chrome中的favicon有关),如“在线”和“ [pw] + database.js,“但它也冻结了我的IDE和终端。然后我在浏览器中看到“页面无效,localhost没有发送任何数据”错误。忽略隐私问题:)思考?
database.js:
var myDB_lookup = function(username, password, route_callbck){
console.log('Looking up: ' + username);
users.get(username, function (err, data) {
if (err) {
route_callbck(null, "Lookup error: "+err);
} else if (data == null) {
route_callbck(null, null);
} else {
// JSON object that stores password & fullname
var value = JSON.parse(data[0].value);
var pw = value.password;
if (pw.valueOf() == password.valueOf()){
route_callbck({ password : pw }, null);
console.log(pw + "database.js");
}else{
//console.log('wrong password');
route_callbck(null, null);
}
}
});
};
routes.js:
var checkLogin = function(req,res){
var user = req.body.username;
var pw = req.body.password;
console.log(user + pw + "routes");
db.lookup(user, pw, function(data, err) {
if (data!=null){
console.log("online");
//req.session.username = user;
//req.session.password = pw;
}else{
res.render('main.ejs',{error:"Fields incorrect"});
}
});
};
main.ejs:
<form method="post" action="/checklogin">
Enter username here: <br>
<input type="text" name="username" placeholder = "Your username"> <br>
Enter password here: <br>
<input type="password" name="password" placeholder = "Your password">
<input type="submit" value="Log In">
</form>
当我执行module.exports = ...
时,这些函数都在routes.js中链接起来答案 0 :(得分:0)
您可能忘记发送回复,请确保
res.render()
或res.json()
或res.send()
被点击
你应该试一下JSON.parse()
,这是最好的做法。
看起来你的罪魁祸首就在这里:
if (data!=null){
console.log("online");
//req.session.username = user;
//req.session.password = pw;
// you need to send the response here too! <<<<<
res.render('main.ejs'); //// !!!
}else{
res.render('main.ejs',{error:"Fields incorrect"});
}