Nodejs 将问题重定向为"错误:发送后无法设置标头"



在nodejs中,当我在保存表单后尝试重定向时,我遇到了一个问题,例如"错误:发送后无法设置标题"。该应用程序曾经在这里崩溃。

这是代码。

exports.createNewUser = function(req, res) {
var data = {};
data.title = 'All users';
if(req.method == 'POST'){
var firstName = req.body.firstName;
var lastName = req.body.lastName;
var email = req.body.email;
var gender = req.body.gender;
var mobile = req.body.mobile;
var address = req.body.address;
// Validation
req.checkBody('firstName', 'Firstname is required').notEmpty();
req.checkBody('lastName', 'Lastname is required').notEmpty();
req.checkBody('email', 'Email is required').notEmpty();
req.checkBody('email', 'Email is not valid').isEmail();
req.checkBody('mobile', 'Mobile is required').notEmpty();
req.checkBody('gender', 'Please choose you gender').notEmpty();
req.checkBody('address', 'Address is required').notEmpty();
req.checkBody('checkbox', 'You need to accept the terms').notEmpty();
var errors = req.validationErrors();
if(errors){
data.errors = errors;
}else{
var passwordGen = generator.generate({length: 10,numbers: true});
var newUser = new User({
firstName: firstName,
lastName:lastName,
email: email,
password: passwordGen,
mobile : mobile,
gender : gender,
address : address
});
// save user to database
newUser.save(function(err, doc) {
if (err) {
//console.error(err);
data.error = 'There are some error';
req.flash('error_msg', 'There are some error');
}else{
req.flash('success_msg', 'You created a new user');
res.redirect('/users/all');
}
});
console.log(data);
}
}
res.render('user/add', data);
};

不知道我在这里做错了什么。请帮忙。谢谢。

保存新用户后,您尝试将用户重定向到'/users/all'。但在控制器的末尾,您还会尝试呈现页面。

您的代码可能会成功创建新用户并尝试重定向,但在完成之前,它还会收到一个呈现页面命令。要解决此问题,您应该添加

req.flash('success_msg', 'You created a new user');
res.redirect('/users/all');
return;

通过包含返回,可以确保重定向用户,而不是继续执行其余逻辑。

在 newUser.save 函数中,你在函数中列出了 err & doc.doc 不会在 if else 语句中使用。那么,文档的意义何在呢?

最新更新