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

时间:2015-07-13 16:56:30

标签: 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()

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

当前错误消息为:"未处理拒绝自定义错误:未更新行'

4 个答案:

答案 0 :(得分:39)

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

var bob = new User({id: 2});

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

如果没有id = 2用户,则更新将几乎默默不要

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

bob.save(null, {method: 'insert'});

Bookshelf save()documentation描述了这种行为。

答案 1 :(得分:0)

您是否使用knex创建了User表?我能想到的一个潜在问题是你没有任何为你的Postgres DB创建表的逻辑。下面是一些示例代码,如果数据库尚不存在,它将在数据库中创建一个表。

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

答案 2 :(得分:-1)

<div style="max-width: 800px;">

<div class="box" style="margin-left: 50px; display: inline-block; width: 300px; height: 500x; text-align: left;">

<ul style="list-style-type: none; margin-left: 0px; margin-top: 48px; float: left; position: absolute; display: inline-block;">
    <li style="font-size: 15px; padding-bottom: 3px; padding-top: 20px;"><a href="http://www.google.com">Traps</a></li>
    <li style="font-size: 15px; margin-top: 5px; padding-bottom: 2px;"><a href="http://www.google.com">Shoulder</a></li>
    <li style="font-size: 15px; padding-bottom: 3px; margin-bottom: 2px;"><a href="http://www.google.com">Chest</a></li>
    <li style="font-size: 15px; padding-bottom: 5px;"><a href="http://www.google.com">Biceps</a></li>
    <li style="font-size: 15px; padding-bottom: 1px;"><a href="http://www.google.com">Abs</a></li>
    <li style="font-size: 15px;"><a href="http://www.google.com">Forearms</a></li>

       <li style="font-size: 15px; margin-top: 10px;"><a href="http://www.google.com">Quadriceps</a></li>
</ul>
<img class="aligncenter" style="width: 300; height: 400; margin-left: 115px; margin-top: 7px;" src="http://www.beyondshredded.pk/wp-content/uploads/2016/10/excercise-1-2.jpg" />

</div>

<div class="box" style="float:right;display: inline-block;width: 300px; height: 400px;">
<img src="http://www.beyondshredded.pk/wp-content/uploads/2016/10/excercise-2-2.jpg" style = "width:300; height: 500;margin-top:50px;margin-left:10px ">

<ul style = "list-style-type:none; margin-top:50px; float:right; position:absolute; display:inline-block; margin-right:100px;">


<li style ="font-size:15px;padding-bottom:25px; padding-top:15px;"><a href= "http://www.google.com">Neck</a></li>

<li style ="font-size:15px;margin-top:5px;padding-bottom:13px;"><a href= "http://www.google.com">Lats &#40back&#41</a></li>

<li style ="font-size:15px; padding-bottom:7px; margin-bottom:2px;"><a href= "http://www.google.com">Triceps</a></li>

<li style ="font-size:15px; padding-bottom:19px"><a href= "http://www.google.com">Middle&#40back&#41</a></li>

<li style ="font-size:15px;padding-bottom:3px"><a href= "http://www.google.com">Lower&#40back&#41</a></li>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

<li style ="font-size: 15px; margin-top:10px;padding-top:3px;"><a href= "http://www.google.com">Calves</a></li>


</ul>
</div>
</div>

答案 3 :(得分:-5)

不,不!新用户返回PROMISE!你不能那样使用它。 试试

new User().save()