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