Ich benutze Knex in Loopback für DB-Betrieb mit MySQL. Meine Aufgabe besteht darin, die 2 Tabelle mit der Transaktion zu aktualisieren. Wenn ich einen neuen Eintrag in einem Tab eingeben, möchte ich die ID dieses Eintrags für den zweiten Abfragevorgang verwenden.Knex-Transaktion funktioniert nicht in Nodejs
Aber wenn die Transaktion den Fehler wirft, wird die Daten nicht zurückgesetzt/der erste Tabelleneintrag wird entfernt, wenn der zweite Tabelleneintrag einen Fehler auslöst. aber in meinem Fall Transaktion immer Begeht nicht, dass ich in meinem Beispiel unten setzen Code Rollback:
addTest : (data) => {
return new promise(function(resolve, reject) {
knex.transaction(function(t) {
return knex('foo')
.transacting(t)
.insert({
foo_id: data.foo_id ? data.foo_id : null,
foo_name: data.foo_name ? data.foo_name : null,
date_entered : new Date()
})
.then(function() {
return knex('bar')
.transacting(t)
.insert({
bar_id: data.bar_id ? data.bar_id : null,
bar_name : data.bar_name ? data.bar_name : null
})
})
.then(t.commit)
.catch(function(e) {
t.rollback();
throw e;
})
})
.then(function() {
// it worked
// resolve('sucess');
console.log('success');
})
.catch(function(e) {
// it failed
console.log('error'+e);
});
});
}
bitte, geben Sie mir geeigneten Vorschlag. danke
Ihre nicht definierte Bindung ist, weil eine Spalte nicht in Ihrer Datenbank ist; Die Abfrage kann nicht eingefügt werden. Der ganze Rest ist schwer zu verstehen, ohne den Code zu sehen, den Sie verwenden, um diesen Fehler zu bekommen (und die Definition Ihrer DB-Tabellen) – clay
Mein Code ist in oben erklärt –
Wie in der Dokumentation, wenn 'knex.transaction (function (t) {'gibt ein Versprechen zurück (wie Ihres), wird es' t.commit' und 't.rollback' basierend auf der Auflösung dieses Versprechens automatisch aufrufen. Ihr Code, der es ebenfalls anruft, ist wahrscheinlich die Ursache Ihres Problems (außer dem Undefinierte Bindung und nicht die erste eingefügte ID in der zweiten Abfrage verwenden. Entweder rufen Sie 't.commit'' t.rollback' selbst auf und geben kein Versprechen zurück, oder geben eine Versprechenskette zurück und lassen Knex die Auflösung der Transaktion behandeln. – clay