[英]Angularjs Login authentication redirection getting — Error: Can't set headers after they are sent
NodeJS / AngularJS的新手。 驗證ID和密碼后,讓登錄頁面重定向到另一個頁面時出現問題。
控制器中的代碼由路由“ / login / check”觸發如下:
exports.logincheck = function(req, res) {
User.findOne({email: req.body.email}).exec(function (err,user) {
if (!user) {
err = 'User not found.';
} else if (user.hashed_password == hashPW(req.body.password.toString())) {
req.session.regenerate(function () {
req.session.user = user.id;
req.session.username = user.username;
req.session.msg = 'Authenticated as ' + user.username ;
res.redirect('/');
});
} else {
err = 'Authentication failed.';
}
if (err) {
req.session.regenerate(function () {
req.session.msg = err;
res.status(404).send({err: 'User Not Found.'});
res.redirect('/login');
});
}
});
我的AngularJS代碼如下:
var loginApp = angular.module('loginApp', []);
loginApp.controller('loginController', ['$scope', '$http', function($scope,$http){
$scope.status = '';
$scope.processForm = function(checkemail,checkpassword) {
$http.post('/login/check', { email : checkemail, password: checkpassword})
.success(function(data, status, headers, config) {
$scope.user = data;
$scope.error = "";
$scope.status = status;
})
.error(function(data, status, headers, config) {
$scope.user = {};
$scope.error = data;
$scope.status = status;
});
};
}]);
只是試圖從我的HTML表單傳遞2個變量進行驗證。 我得到的錯誤是:
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:700:10)
at ServerResponse.send (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:154:12)
at fn (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:934:10)
at View.exports.renderFile [as engine] (/Users/josh_loh/Code/project/node_modules/ejs/lib/ejs.js:353:10)
at View.render (/Users/josh_loh/Code/project/node_modules/express/lib/view.js:93:8)
at EventEmitter.app.render (/Users/josh_loh/Code/project/node_modules/express/lib/application.js:566:10)
at ServerResponse.res.render (/Users/josh_loh/Code/project/node_modules/express/lib/response.js:938:7)
at /Users/josh_loh/Code/project/routes.js:52:7
at Layer.handle [as handle_request] (/Users/josh_loh/Code/project/node_modules/express/lib/router/layer.js:82:5)
at next (/Users/josh_loh/Code/project/node_modules/express/lib/router/route.js:110:13)
at Route.dispatch (/Users/josh_loh/Code/project/node_modules/express/lib/router/route.js:91:3)
at Layer.handle [as handle_request] (/Users/josh_loh/Code/project/node_modules/express/lib/router/layer.js:82:5)
at /Users/josh_loh/Code/project/node_modules/express/lib/router/index.js:267:22
at Function.proto.process_params (/Users/josh_loh/Code/project/node_modules/express/lib/router/index.js:321:12)
at next (/Users/josh_loh/Code/project/node_modules/express/lib/router/index.js:261:10)
請幫忙。 真的很想知道我的理解有誤。 謝謝!
看來控制器中至少有兩個問題。
您有res.status(404).send({err: 'User Not Found.'});
其次是res.redirect('/login');
。 send
和redirect
完成請求並響應請求,因此基本上就像嘗試響應兩次一樣。 這可能是給您“無法設置標題”錯誤的原因。 這個類似問題的答案很好地總結了何時應使用各種res方法。
您還在req對象上設置值。 Req只是為您提供有關請求的信息,通常應將其視為只讀對象。 只有res對象中的數據將返回給客戶端。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.