我试图使用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('部门名称',80).unique()。notNullable();
table.string('building_name',40);
})。then(function(){
console.log('部门表已创建');
knex('部门').insert(
[{department_name:'Nano Technology',building_name:'block-A'},
{department_name:“机械工程”,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
,向实例添加一个或多个处理程序时,才会发生这种情况。 tap
或exec
,因为这将创建实际的Promise
,它将查询发送到数据库客户端。
Knex和书架很棒。 非常感谢
2014年1月16日,13:17,Johannes Lumpe [email protected]写道:
您必须返回您的knex插入语句,或向其添加处理程序(通过使用then或catch / catch),否则,您只是在创建构建器实例,而实际上并未执行查询。 当您调用诸如insert之类的方法时,请选择frometc。 -基本上是查询生成器上的每个方法-它只会修改其内部状态,而不会实际执行查询。 只有在您使用then,catch / catch,last / finally,tap或exec将一个或多个处理程序添加到实例时,才会发生这种情况,因为这将创建实际的Promise,并将查询发送到数据库客户端。
-
直接回复此电子邮件或在GitHub上查看。
别客气!
最有用的评论
您必须
return
的knex
插入语句,或向其中添加处理程序(使用then
或catch
/caught
),否则,您只是在创建builder
实例,但实际上并未执行查询。 当您调用insert
,select
,from
等方法时(基本上是查询生成器上的每个方法),它只会修改其内部状态,而不会真正执行查询。 仅当您使用then
,catch
/caught
,lastly
/finally
,向实例添加一个或多个处理程序时,才会发生这种情况。tap
或exec
,因为这将创建实际的Promise
,它将查询发送到数据库客户端。