Sails.js: save() 模型似乎不起作用错误 (E_UNKNOWN)
Sails.js: save() model doesn't seems to work Error (E_UNKNOWN)
我的模型定义如下所示:
//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
如果手动指定模型的 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
}
}
};
我在 mongo 中使用 Sails 时也遇到了这个问题。我通过将 "id" 属性更改为其他一些属性来修复此问题,比如 "Id"。创建记录时,会自行创建一个 "id" 属性,其中包含 mongo ObjectId。可能这可能是不允许同时使用两个 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
}
}
};
产生错误的代码如下
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
如果手动指定模型的 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
}
}
};
我在 mongo 中使用 Sails 时也遇到了这个问题。我通过将 "id" 属性更改为其他一些属性来修复此问题,比如 "Id"。创建记录时,会自行创建一个 "id" 属性,其中包含 mongo ObjectId。可能这可能是不允许同时使用两个 id 属性导致错误的原因。