Sequelize TypeError:无法读取null的属性“1”

时间:2015-03-27 10:43:34

标签: javascript node.js sequelize.js

通常这种类型的错误不会成为问题,但我根本无法理解这种情况发生在哪里:

这是我的设置:

router.route('/api/academyModule')
.post(function (req, res) {

    req.body.academyModule.module_id = req.body.academyModule.module.id;
    req.body.academyModule.module_module_type_id = req.body.academyModule.module.module_type.id;
    var am = AcademyModule.build(req.body.academyModule);
    am.add(req.body.academyModule.requirements, req.body.academyModule, function (success) {
            res.json({id: this[null]});

        },
        function (err) {
            res.status(err).send(err);
        });
    if(req.body.teams != null)
    {
        req.body.teams.forEach(function(y)
        {
            var atm = academy_team_has_academy_module.build({academy_team_id: y.id, academy_id: y.academy_id, academy_module_module_id: req.body.academyModule.module_id })
            atm.add(function(success)
            {

            }, function(err)
            {
                res.status(err).send(err);
            });
        });
    }
})

为此,我有以下型号:

    academy_team_has_academy_module = sequelize.define('academy_team_has_academy_module', {
    academy_team_id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: false
    },
    academy_id: DataTypes.INTEGER,
    academy_module_module_id: DataTypes.INTEGER
}, {
    freezeTableName: true,
    instanceMethods: {
        add: function (onSuccess, onError) {
            academy_team_has_academy_module.build(this.dataValues)
                .save().ok(onSuccess).error(onError);
        }
    }
});

我确定这种情况发生在这个模型而不是AcademyModule,因为当我删除此代码时,它运行没有任何问题。所以在我的控制台中,我得到以下打印输出:

    Executing (default): INSERT INTO `requirements` (`id`,`value`,`requirement_type_id`) VALUES (DEFAULT,5,'2');
Executing (default): INSERT INTO `academy_team_has_academy_module` (`academy_team_id`,`academy_id`,`academy_module_module_id`) VALUES (1,3,11);
Executing (default): INSERT INTO `academy_module` (`academy_id`,`module_id`,`module_module_type_id`,`sort_number`,`requirements_id`) VALUES ('3',11,4,4,40);

就在我得到之后:

    /var/www/learningbankapi/src/node_modules/mysql/lib/protocol/Parser.js:82
        throw err;
              ^
TypeError: Cannot read property '1' of null
    at module.exports.Query.formatError (/var/www/learningbankapi/src/node_modules/sequelize/lib/dialects/mysql/query.js:155:23)
    at Query.module.exports.Query.run [as _callback] (/var/www/learningbankapi/src/node_modules/sequelize/lib/dialects/mysql/query.js:38:23)
    at Query.Sequence.end (/var/www/learningbankapi/src/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
    at Query.ErrorPacket (/var/www/learningbankapi/src/node_modules/mysql/lib/protocol/sequences/Query.js:93:8)
    at Protocol._parsePacket (/var/www/learningbankapi/src/node_modules/mysql/lib/protocol/Protocol.js:271:23)
    at Parser.write (/var/www/learningbankapi/src/node_modules/mysql/lib/protocol/Parser.js:77:12)
    at Protocol.write (/var/www/learningbankapi/src/node_modules/mysql/lib/protocol/Protocol.js:39:16)
    at Socket.Connection.connect (/var/www/learningbankapi/src/node_modules/mysql/lib/Connection.js:82:28)
    at Socket.EventEmitter.emit (events.js:95:17)
    at Socket.stream.pause.paused (_stream_readable.js:746:14)
    at Socket.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at emitReadable (_stream_readable.js:404:5)
    at readableAddChunk (_stream_readable.js:165:9)
    at Socket.Readable.push (_stream_readable.js:127:10)
    at TCP.onread (net.js:526:21)

我调试了整个事情,我似乎无法找到任何未定义的变量。这里可能出了什么问题?

1 个答案:

答案 0 :(得分:0)

您的问题是ForeignKeyContraintError。 Sequelize试图抛出一个新的错误但却出现了意外的error.message。如果您的配置正常,这可能是续集的错误。

也许停用外国禁令检查(如果可能)将解决您的问题。

请参阅:https://github.com/sequelize/sequelize/blob/master/lib/dialects/mysql/query.js#L153