then()を使用して、作成テーブルと行の挿入をチェーンしようとしています。
テーブルは作成されますが、挿入は行われません(エラーはキャッチされません)。
誰かが私がどこが間違っているのか教えてもらえますか?
ありがとう
MN
var Promise = require( 'bluebird');
var Knex = require( 'knex');
Knex.knex = Knex.initialize({
クライアント: 'pg'、
接続:{
…
}、
デバッグ:true
});
var knex = require( 'knex')。knex;
knex.schema.createTable( 'department'、function(table){
table.increments( 'department_id')。primary()。notNullable();
table.string( 'department_name'、80).unique()。notNullable();
table.string( 'building_name'、40);
})。then(function(){
console.log( '部門テーブルが作成されました');
knex( 'department')。insert(
[{department_name: 'Nano Technology'、building_name: 'block-A'}、
{department_name: 'Mechanical Engineering'、building_name: 'block-C'}]、
'department_id'
);
})。then(function(){
console.log( '部門が挿入されました');
})。catch(function(e){
console.log(e);
});
return
knex
挿入ステートメントを追加するか、ハンドラーを追加する必要があります( then
またはcatch
/ caught
)。それ以外の場合は、 builder
インスタンスを作成しているだけで、実際にはクエリを実行していません。 insert
、 select
、 from
などのメソッドを呼び出すと(基本的にクエリビルダーのすべてのメソッド)、内部状態のみが変更され、実際にはクエリが実行されません。 。 これは、 then
、 catch
/ caught
、 lastly
/ finally
を使用してインスタンスに1つ以上のハンドラーを追加した場合にのみ発生します。 tap
またはexec
。これにより、実際のPromise
作成され、データベースクライアントにクエリが送信されます。
KnexとBookshelfは素晴らしいです。 どうもありがとう
2014年1月16日には、13時17で、ヨハネスLumpeの[email protected]は書きました:
knex insertステートメントを返すか、ハンドラーを追加する必要があります(thenまたはcatch / catchを使用)。そうでない場合は、ビルダーインスタンスを作成しているだけで、実際にはクエリを実行していません。 insert、select、frometcなどのメソッドを呼び出すとき。 -基本的にクエリビルダーのすべてのメソッド-内部状態を変更するだけで、実際にはクエリを実行しません。 これは、then、catch / catch、last / final、tap、またはexecを使用してインスタンスに1つ以上のハンドラーを追加した場合にのみ発生します。これにより、実際のPromiseが作成され、データベースクライアントにクエリが送信されます。
—
このメールに直接返信するか、GitHubで表示してください。
どういたしまして!
最も参考になるコメント
return
knex
挿入ステートメントを追加するか、ハンドラーを追加する必要があります(then
またはcatch
/caught
)。それ以外の場合は、builder
インスタンスを作成しているだけで、実際にはクエリを実行していません。insert
、select
、from
などのメソッドを呼び出すと(基本的にクエリビルダーのすべてのメソッド)、内部状態のみが変更され、実際にはクエリが実行されません。 。 これは、then
、catch
/caught
、lastly
/finally
を使用してインスタンスに1つ以上のハンドラーを追加した場合にのみ発生します。tap
またはexec
。これにより、実際のPromise
作成され、データベースクライアントにクエリが送信されます。