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添加任何内容。
当前错误消息为:"未处理拒绝自定义错误:未更新行'
答案 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 (back)</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(back)</a></li>
<li style ="font-size:15px;padding-bottom:3px"><a href= "http://www.google.com">Lower(back)</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()