Aloha,我试图将表单中的数据插入到我的数据库中,遗憾的是出现错误并且我不明白为什么,错误是Error: Can't set headers after they are sent.
并且我一直在something is wrong
进入我在console.log中的代码表明我的数据库中存在错误
已更新
这是我目前得到的错误http://imgur.com/ROl06t7
{ [MongoError: E11000 duplicate key error index: symsal.users.$username_1 dup key: { : null }]
name: 'MongoError',
err: 'E11000 duplicate key error index: symsal.users.$username_1 dup key: { : null }',
code: 11000,
n: 0,
connectionId: 84,
ok: 1 }
this.handleSignup = function(req, res, next) {
"use strict";
validateSignup(req.body, function(error, data) {
if(error) {
res.send(400, error.message);
} else {
users.addUser(data, function(err, user) {
"use strict";
sessions.startSession(data, function(err, session_id) {
"use strict";
if (err) return next(err);
res.cookie('session', session_id);
});
});
res.send(200);
}
})
}
this.addUser = function(data,callback) {
"use strict";
var salt = bcrypt.genSaltSync();
var password_hash = bcrypt.hashSync(data.password, salt);
var user = {
'_id': data.email,
'email':data.email,
'password': password_hash,
'firstName': data.firstName,
'lastName': data.lastName,
'penName': data.penName,
'publicUsername':data.publicUsername
};
console.log(user);
users.insert(user, function (err, result) {
"use strict";
if (!err) {
console.log("Inserted new user");
return callback(null, result[0]);
}else{
console.log("Something is wrong");
}
return callback(err, null);
});
}
如果删除return callback(err, null);
,Error: Can't set headers after they are sent.
将不会显示,但仍会在我的终端中显示"Something is wrong"
。在我的代码中有任何错误吗?我相信return callback(err, null);
是告诉应用程序有错误并返回null应用程序。
答案 0 :(得分:0)
错误意味着您已声明username
属性应该是唯一的,但您正在尝试插入数据库中已存在username
的新文档。
由于您实际上没有在文档上设置username
属性,因此MongoDB将为每个新文档插入null
值(并为唯一属性插入第二个null
值也会违反唯一性约束。)
如果您不再使用username
属性,则应删除其上的唯一索引。从MongoDB shell看起来像这样:
db.users.dropIndex({ username : 1 })
如果您确实想继续使用它,但如果您没有在文档上声明null
属性,则不希望MongoDB插入username
,请使用{{3}选项。