bookshelf js save()命令不更新postgresql db中的行

Dav*_*ale 18 postgresql bookshelf.js

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()
Run Code Online (Sandbox Code Playgroud)

bookshelf.js似乎无法向db添加任何内容.

当前的错误消息是:"未处理的拒绝CustomError:No Rows Updated"

fla*_*usa 41

当您创建提供自己ID的模型时,例如

var bob = new User({id: 2});
Run Code Online (Sandbox Code Playgroud)

Bookshelf假定它是更新操作,而不是插入.它将internal isNew属性设置为false,并且在save()调用when时,而不是INSERT INTO user(id, ...) VALUES (2, ...);执行它UPDATE user ... WHERE id = 2;.

如果没有用户id = 2的更新将几乎悄无声息无能为力.

要强制插入,必须将save()更改为:

bob.save(null, {method: 'insert'});
Run Code Online (Sandbox Code Playgroud)

Bookshelf save()文档描述了这种行为.