【发布时间】:2021-03-01 19:13:26
【问题描述】:
我正在尝试使用 express js 创建一个登录系统。它工作正常,但登录后在终端中打印错误。 这是错误:
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 (/home/amruth/softwareproject/node_modules/express/lib/response.js:771:10)
at ServerResponse.send (/home/amruth/softwareproject/node_modules/express/lib/response.js:170:12)
at done (/home/amruth/softwareproject/node_modules/express/lib/response.js:1008:10)
at Object.exports.renderFile (/home/amruth/softwareproject/node_modules/pug/lib/index.js:446:12)
at View.exports.__express [as engine] (/home/amruth/softwareproject/node_modules/pug/lib/index.js:491:11)
at View.render (/home/amruth/softwareproject/node_modules/express/lib/view.js:135:8)
at tryRender (/home/amruth/softwareproject/node_modules/express/lib/application.js:640:10)
at Function.render (/home/amruth/softwareproject/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/home/amruth/softwareproject/node_modules/express/lib/response.js:1012:7)
at /home/amruth/softwareproject/routes.js:116:11
at Layer.handle [as handle_request] (/home/amruth/softwareproject/node_modules/express/lib/router/layer.js:95:5)
at next (/home/amruth/softwareproject/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/home/amruth/softwareproject/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/home/amruth/softwareproject/node_modules/express/lib/router/layer.js:95:5)
代码如下:
router.get('/signup', function (req, res) {
res.render('signup');
});
router.post('/signup', function (req, res) {
if (!req.body.gmail || !req.body.password) {
res.status("400");
res.send("Invalid details");
}
else {
Users.filter(function (user) {
if (user.gmail == req.body.gmail) {
console.log(user.gmail);
res.render('signup', { message: "Gmail already exists" });
}
});
var newUser = { gmail: req.body.gmail, password: req.body.password };
Users.push(newUser);
console.log(Users.length);
req.session.user = newUser;
console.log(req.session.user);
res.redirect('/secret');
}
});
function checkSignIn(req, res, next) {
if (req.session.user) {
next();
}
else {
var err = new Error("Not logged in!");
next(err);
}
}
router.get('/secret', checkSignIn, function (req, res) {
res.render('secret', { id: req.session.user.gmail });
});
router.get('/login', function (req, res) {
res.render('login');
});
router.post('/login', function (req, res) {
//console.log(Users);
if (!req.body.gmail || !req.body.password) {
res.render('login', { message: "Please enter valid info" });
}
else {
Users.filter(function (user) {
if (user.gmail == req.body.gmail && user.password == req.body.password) {
req.session.user = user;
res.redirect('/secret');
}
});
res.render('login', { message: "Invalid credentials" });
}
});
router.get('/logout', function (req, res) {
req.session.destroy(function () {
console.log("user logged out.")
});
res.redirect('/login');
});
router.use('/secret', function (err, req, res, next) {
console.log(err);
res.redirect('/login');
});
【问题讨论】:
-
router.post('/signup', function (req, res) { if (!req.body.gmail || !req.body.password) { res.status("400"); res.send("Invalid details"); }combine it using return