我正在提交登录表单并检查用户名或密码是否正确,但是在这里我遇到了错误提示,请帮助我解决该错误。谢谢
app.post('/login', function(request, response) {
var username = request.body.username;
var password = request.body.password;
if (username && password) {
connection.query('SELECT * FROM users WHERE username = ? AND password = ?', [username, password], function(error, results, fields) {
console.log(results);
if (results.length > 0) {
request.session.loggedin = true;
request.session.username = username;
// request.session.w_id = us;
response.redirect('/');
next();
} else {
response.render('login', {layout: 'login',error:'Invalid Username Or Password'});
}
response.end();
});
} else {
response.render('login', {layout: 'login',error:'Please Enter Username And Password'});
response.end();
}
});
错误
throw new Error('Can\'t set headers after they are sent.');
^
Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.header (D:\Node Projects\uni_project\node_modules\express\lib\response.js:775:10)
at ServerResponse.contentType (D:\Node Projects\uni_project\node_modules\express\lib\response.js:603:15)
at ServerResponse.send (D:\Node Projects\uni_project\node_modules\express\lib\response.js:149:14)
at done (D:\Node Projects\uni_project\node_modules\express\lib\response.js:1012:10)
at Immediate._onImmediate (D:\Node Projects\uni_project\node_modules\express-handlebars\lib\utils.js:26:13)
at runCallback (timers.js:810:20)
at tryOnImmediate (timers.js:768:5)
at processImmediate [as _immediateCallback] (timers.js:745:5)
答案 0 :(得分:0)
问题出在这个区块
if (results.length > 0) {
request.session.loggedin = true;
request.session.username = username;
// request.session.w_id = us;
response.redirect('/');
next();
} else {
response.render('login', {layout: 'login',error:'Invalid Username Or Password'});
}
response.end();
一旦您进入了if循环,并且成功重定向,并且响应已结束。但是Javascript将继续到response.end()
的if循环之外的下一行,这就是为什么您看到错误的原因。您也无法调用next()
,因为这意味着当您调用response.end()
或response.redirect
正确的是-
app.post('/login', function(request, response, next) {
var username = request.body.username;
var password = request.body.password;
if (username && password) {
connection.query('SELECT * FROM users WHERE username = ? AND password = ?',[username, password], function(error, results, fields) {
console.log(results);
if (results.length > 0) {
request.session.loggedin = true;
request.session.username = username;
// request.session.w_id = us;
response.redirect('/');
} else {
response.render('login', {layout: 'login',error:'Invalid Username Or Password'});
}
}
else {
response.render('login', {layout: 'login',error:'Please Enter Username And Password'});
}
});