Sails.js:save()模型似乎没有工作错误(E_UNKNOWN)

时间:2016-11-01 16:33:40

标签: javascript node.js sails.js waterline

我的模型定义如下:

//api/models/Table.js
module.exports = {
    tableName: 'table',
    autoCreatedAt: false,
    autoUpdatedAt: false,
    attributes: {
        id: {
            type: 'integer',
            autoIncrement: true,
            primaryKey: true,
            size: 11
        },
        title1: {
            type: 'string',
            index: true,
            size: 255
        },
        title2: {
            type: 'string',
            size: 255
        },
        title2: {
            type: 'string',
            size: 255
        },
        countries: { //Countries nationalities
            model: 'hg_laender'
        },
        year: {
            type: 'string',
            size: 4
        },
        relased: { //released
            type: 'string',
            enum: ['true', 'false']
        },
        createdOn: { //Created on
            type: 'datetime'
        },
        changedOn: { // Changed on
            type: 'datetime'
        },
        documents: { //Document type
            collection: 'documents',
            via: 'table',
            dominant: true
        },
        creator: { //Creator
            collection: 'creator',
            via: 'table',
            dominant: true
        },
        kanton: { // Canton
            collection: 'kanton',
            via: 'table',
            dominant: true
        },
        language: {
            collection: 'language',
            via: 'table',
            dominant: true
        }
    }
};

产生错误的代码如下

    Table.find()
    .exec((err, tables) => {
        if(err) {
            sails.log.error('first error', err);
        }
        sails.log.debug(tables[0]); //The record is loaded correctly
        tables[0].save((err, model) => {
            if(err) {
                sails.log.error('second error', err);
            }
        });
    });

我收到以下错误消息:

error: second error Error (E_UNKNOWN) :: Encountered an unexpected error
    at new WLError (/home/xxx/node_modules/waterline/lib/waterline/error/WLError.js:25:15)
    at /home/xxx/node_modules/waterline/lib/waterline/model/lib/defaultMethods/save.js:196:17
    at /home/xxx/node_modules/async/lib/async.js:52:16
    at /home/xxx/node_modules/async/lib/async.js:550:17
    at /home/xxx/node_modules/async/lib/async.js:544:17
    at _arrayEach (/home/xxx/node_modules/async/lib/async.js:85:13)
    at Immediate.taskComplete (/home/xxx/node_modules/async/lib/async.js:543:13)
    at processImmediate [as _immediateCallback] (timers.js:383:17)

如果使用create()方法,则可以使用。实际上是将记录保存在数据库中。但如果我尝试更新它,它就无法工作。

知道我做错了什么?

其他信息: - sails.js版本:0.12.8

2 个答案:

答案 0 :(得分:0)

如果手动指定模型的ID,似乎有问题。 现在我改变了下面的模型,它的工作原理。顺便说一下,我不知道为什么指定id不起作用。它也是'创建模型时不会抛出任何错误..

//api/models/Table.js
module.exports = {
    tableName: 'table',
    autoCreatedAt: false,
    autoUpdatedAt: false,
    attributes: {
        //id: {
        //    type: 'integer',
        //    autoIncrement: true,
        //    primaryKey: true,
        //    size: 11
        //},
        title1: {
            type: 'string',
            index: true,
            size: 255
        },
        title2: {
            type: 'string',
            size: 255
        },
        title2: {
            type: 'string',
            size: 255
        },
        countries: { //Countries nationalities
            model: 'hg_laender'
        },
        year: {
            type: 'string',
            size: 4
        },
        relased: { //released
            type: 'string',
            enum: ['true', 'false']
        },
        createdOn: { //Created on
            type: 'datetime'
        },
        changedOn: { // Changed on
            type: 'datetime'
        },
        documents: { //Document type
            collection: 'documents',
            via: 'table',
            dominant: true
        },
        creator: { //Creator
            collection: 'creator',
            via: 'table',
            dominant: true
        },
        kanton: { // Canton
            collection: 'kanton',
            via: 'table',
            dominant: true
        },
        language: {
            collection: 'language',
            via: 'table',
            dominant: true
        }
    }
};

答案 1 :(得分:0)

在使用带有mongo的Sails时我也遇到过这个问题。我通过将“id”属性更改为其他属性来修复此问题,例如“Id”。在创建记录时,会创建一个“id”属性,该属性包含mongo ObjectId。可能这可能是导致错误同时不允许两个id属性的原因。