Ich entwickle Anwendungen mit node.js
. Ich bin bereit, SQLite
als eingebettete Datenbank zu verwenden. Ich habe online nach SQLite
npm-Modulen gesucht. Ich habe verschiedene Module gefunden:
Aus der Dokumentation und anderen Quellen habe ich verstanden, dass (1) synchron arbeitet, während (2) und (3) asynchron arbeiten. Also habe ich den Plan aufgegeben (1).
Nun möchte ich wissen, was ist der Unterschied zwischen (2) und (3) und welcher sollte bevorzugt werden? Ich googelte viel, konnte aber nicht viel helfen.
Verwenden Sie https://github.com/mapbox/node-sqlite3 . Es ist asynchron (fast ein Muss), es wird am aktivsten gewartet und es hat die meisten Stars auf GitHub.
Für meine Architektur schien synchron better-sqlite3
besser zu sein:
https://www.npmjs.com/package/better-sqlite3
import express from 'express';
import db from 'sqlite'; // <=
import Promise from 'bluebird';
const app = express();
const port = process.env.PORT || 3000;
app.get('/posts', async (req, res, next) => {
try {
const posts = await db.all('SELECT * FROM Post LIMIT 10'); // <=
res.send(posts);
} catch (err) {
next(err);
}
});
Promise.resolve()
// First, try to open the database
.then(() => db.open('./database.sqlite', { Promise }) // <=
// Update db schema to the latest version using SQL-based migrations
.then(() => db.migrate({ force: 'last' }) // <=
// Display error message if something went wrong
.catch((err) => console.error(err.stack))
// Finally, launch the Node.js app
.finally(() => app.listen(port));
NOTE: Das obige Beispiel funktioniert nur mit Node.js v6 und neuer (vorausgesetzt, dass import
und async/await
Sprachmerkmale, die im Code verwendet werden, mit Babel übertragen werden ). Für frühere Versionen von Node.js verwenden Sie var db = require('sqlite/legacy');
.
Das Modul von Grumdrig scheint dasjenige zu sein, auf das am meisten auf Stack Overflow und auch auf anderen Websites verwiesen wird.
Die Dokumentation ist auch ziemlich gut: http://github.grumdrig.com/node-sqlite/
Ich habe eher wenig Erfahrung mit Node SQLite, aber die Community scheint gewählt zu haben.
Ich habe von https://github.com/mapbox/node-sqlite3 zu https://github.com/JoshuaWise/better-sqlite3 gewechselt. Einer der Gründe ist, dass der Autor von better-sqlites eine ausführliche Antwort gegeben hat: https://github.com/JoshuaWise/better-sqlite3/issues/181 , warum https://github.com/JoshuaWise/ better-sqlite3 # warum-sollte-ich-verwenden-statt-des-Knotens-sqlite3