Estou tentando usar then () para encadear minha tabela de criação e inserção de linhas.
A tabela é criada, mas nenhuma inserção acontece (nenhum erro é detectado).
Alguém pode me dizer onde estou errado?
obrigado
MN
var Promise = require ('bluebird');
var Knex = requer ('knex');
Knex.knex = Knex.initialize ({
cliente: 'pg',
conexão: {
…
},
debug: true
});
var knex = require ('knex'). knex;
knex.schema.createTable ('departamento', função (tabela) {
table.increments ('department_id'). primary (). notNullable ();
table.string ('department_name', 80) .unique (). notNullable ();
table.string ('building_name', 40);
}). então (função () {
console.log ('a tabela de departamento foi criada');
knex ('departamento'). inserir (
[{department_name: 'Nanotecnologia', building_name: 'block-A'},
{departamento_name: 'Engenharia Mecânica', building_name: 'block-C'}],
'departamento_id'
);
}). então (função () {
console.log ('departamentos inseridos');
}). catch (function (e) {
console.log (e);
});
Você deve return
sua instrução de knex
inserir ou adicionar manipuladores a ela (usando then
ou catch
/ caught
), caso contrário, você está apenas criando uma instância builder
mas não está realmente executando a consulta. Quando você chama métodos como insert
, select
, from
etc. - basicamente todos os métodos no construtor de consultas - ele apenas modificará seu estado interno, mas não executará realmente a consulta . Isso só acontecerá quando você adicionar um ou mais manipuladores à instância usando then
, catch
/ caught
, lastly
/ finally
, tap
ou exec
, porque isso criará o Promise
real, que envia a consulta ao cliente do banco de dados.
Knex e Bookshelf são ótimos. Muito obrigado
Em 16 de janeiro de 2014, às 13:17, Johannes Lumpe [email protected] escreveu:
Você deve retornar sua instrução de inserção do knex ou adicionar manipuladores a ela (usando then ou catch / catch), caso contrário, você está apenas criando uma instância do construtor, mas não está realmente executando a consulta. Quando você chama métodos como insert, select, frometc. - basicamente todos os métodos no construtor de consultas - ele apenas modificará seu estado interno, mas não executará realmente a consulta. Isso só acontecerá quando você adicionar um ou mais manipuladores à instância usando then, catch / catch, last / finally, tap ou exec, porque isso criará o Promise real, que envia a consulta ao cliente do banco de dados.
-
Responda a este e-mail diretamente ou visualize-o no GitHub.
De nada!
Comentários muito úteis
Você deve
return
sua instrução deknex
inserir ou adicionar manipuladores a ela (usandothen
oucatch
/caught
), caso contrário, você está apenas criando uma instânciabuilder
mas não está realmente executando a consulta. Quando você chama métodos comoinsert
,select
,from
etc. - basicamente todos os métodos no construtor de consultas - ele apenas modificará seu estado interno, mas não executará realmente a consulta . Isso só acontecerá quando você adicionar um ou mais manipuladores à instância usandothen
,catch
/caught
,lastly
/finally
,tap
ouexec
, porque isso criará oPromise
real, que envia a consulta ao cliente do banco de dados.