书架js save()命令不更新postgresql db中的行
bookshelf js save() command not updating rows in postgresql db
JS 初学者试图通过 bookshelf.js.
让 PostgreSQL DB 与 express.js 对话
github: https://github.com/duskyshelf/bookers-academy/blob/master/booker.js
var knex = require('knex')({
client: 'pg',
connection: "postgres://localhost/bookers"
});
var bookshelf = require('bookshelf')(knex);
var User = bookshelf.Model.extend({
tableName: 'users'
});
var bob = new User({id: 2});
bob.save()
bookshelf.js 似乎无法向数据库添加任何内容。
当前错误消息是:“未处理的拒绝 CustomError:没有更新的行”
您是否使用 knex 创建了用户 table?我能想到的一个潜在问题是您没有任何实际为您的 Postgres 数据库创建 table 的逻辑。下面是一些示例代码,如果 table 尚不存在,它将在您的数据库中创建它。
bookshelf.knex.schema.hasTable('User').then(function(exists) {
if(!exists) {
bookshelf.knex.schema.createTable('User'), function(user) {
user.increments('id').primary();
user.timestamps();
}).then(function(table){
console.log('Created Table:', table);
});
}
});
当您创建模型时提供您自己的 ID,例如
var bob = new User({id: 2});
Bookshelf 假定它是一个 更新 操作,不是 一个插入。它将内部 isNew
属性设置为 false,当 save()
被调用时,它会执行 UPDATE user ... WHERE id = 2;
.
而不是 INSERT INTO user(id, ...) VALUES (2, ...);
如果没有用户id = 2
,更新将几乎静静什么都不做。
要强制插入,您必须将 save() 更改为:
bob.save(null, {method: 'insert'});
Bookshelf save() documentation 描述了此行为。
不不不!新用户 returns 承诺!你不能那样使用它。
尝试
new User().save()
new User({id: 2}).
save().
then((model) => {
res.json({ success: true });
});
JS 初学者试图通过 bookshelf.js.
让 PostgreSQL DB 与 express.js 对话github: https://github.com/duskyshelf/bookers-academy/blob/master/booker.js
var knex = require('knex')({
client: 'pg',
connection: "postgres://localhost/bookers"
});
var bookshelf = require('bookshelf')(knex);
var User = bookshelf.Model.extend({
tableName: 'users'
});
var bob = new User({id: 2});
bob.save()
bookshelf.js 似乎无法向数据库添加任何内容。
当前错误消息是:“未处理的拒绝 CustomError:没有更新的行”
您是否使用 knex 创建了用户 table?我能想到的一个潜在问题是您没有任何实际为您的 Postgres 数据库创建 table 的逻辑。下面是一些示例代码,如果 table 尚不存在,它将在您的数据库中创建它。
bookshelf.knex.schema.hasTable('User').then(function(exists) {
if(!exists) {
bookshelf.knex.schema.createTable('User'), function(user) {
user.increments('id').primary();
user.timestamps();
}).then(function(table){
console.log('Created Table:', table);
});
}
});
当您创建模型时提供您自己的 ID,例如
var bob = new User({id: 2});
Bookshelf 假定它是一个 更新 操作,不是 一个插入。它将内部 isNew
属性设置为 false,当 save()
被调用时,它会执行 UPDATE user ... WHERE id = 2;
.
INSERT INTO user(id, ...) VALUES (2, ...);
如果没有用户id = 2
,更新将几乎静静什么都不做。
要强制插入,您必须将 save() 更改为:
bob.save(null, {method: 'insert'});
Bookshelf save() documentation 描述了此行为。
不不不!新用户 returns 承诺!你不能那样使用它。 尝试
new User().save()
new User({id: 2}).
save().
then((model) => {
res.json({ success: true });
});