将数据插入database express / mongodb app时出错

时间:2013-11-30 04:37:15

标签: javascript node.js mongodb express

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);
        }
    })

    }

addUser

 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应用程序。

希望你们能帮助我,谢谢你们

1 个答案:

答案 0 :(得分:0)

错误意味着您已声明username属性应该是唯一的,但您正在尝试插入数据库中已存在username的新文档。

由于您实际上没有在文档上设置username属性,因此MongoDB将为每个新文档插入null值(并为唯一属性插入第二个null值也会违反唯一性约束。)

如果您不再使用username属性,则应删除其上的唯一索引。从MongoDB shell看起来像这样:

db.users.dropIndex({ username : 1 })

如果您确实想继续使用它,但如果您没有在文档上声明null属性,则不希望MongoDB插入username,请使用{{3}选项。