JavaScriptの初心者が、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:行が更新されていません」
次のように、独自のIDを提供するモデルを作成するとき
_var bob = new User({id: 2});
_
本棚は、それがupdate操作であり、挿入ではないと想定しています。内部のisNew
属性をfalseに設定し、save()
ではなくINSERT INTO user(id, ...) VALUES (2, ...);
が呼び出されると、_UPDATE user ... WHERE id = 2;
_を実行します。
_id = 2
_のユーザーがいない場合、更新はほとんど静かにDO NOTHINGになります。
強制的に挿入するには、save()を次のように変更する必要があります。
_bob.save(null, {method: 'insert'});
_
Bookshelf save() documentation はこの動作を説明しています。
Knexを使用してユーザーテーブルを作成しましたか?私が考えることができる1つの潜在的な問題は、実際に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);
});
}
});