Je développe une application en utilisant node.js
. En cela, je suis prêt à utiliser SQLite
comme base de données intégrée. J'ai cherché en ligne SQLite
npm modules. J'ai trouvé divers modules:
D'après la documentation et d'autres sources, j'ai compris que (1) fonctionne de manière synchrone, alors que (2) et (3) fonctionne de manière asynchrone. J'ai donc abandonné le plan d'utilisation (1).
Maintenant, je veux savoir quelle est la différence entre (2) et (3) et laquelle devrait être préférée? J'ai beaucoup cherché sur Google mais je ne trouvais pas grand chose à aider.
Utilisez https://github.com/mapbox/node-sqlite3 . C'est asynchrone (presque indispensable), c'est le plus activement maintenu, et il a le plus d'étoiles sur GitHub.
Pour mon architecture, le better-sqlite3
semblait plus performant:
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: l'exemple ci-dessus ne fonctionne qu'avec Node.js v6 et plus récent (en supposant que import
et async/await
les fonctionnalités de langage utilisées dans le code sont transmises à Babel ). Pour les versions antérieures de Node.js, utilisez var db = require('sqlite/legacy');
.
Le module de Grumdrig semble être celui qui a été le plus référencé sur Stack Overflow, ainsi que sur d'autres sites.
En outre, la documentation est plutôt bonne: http://github.grumdrig.com/node-sqlite/
J'ai assez peu d'expérience avec Node SQLite, mais la communauté semble l'avoir choisie.
Je suis passé de https://github.com/mapbox/node-sqlite3 à https://github.com/JoshuaWise/better-sqlite3 . Une des raisons est que mieux, l'auteur m'a donné une réponse complète, https://github.com/JoshuaWise/better-sqlite3/issues/181 , à propos de pourquoi https://github.com/JoshuaWise/ better-sqlite3 # pourquoi-devrais-je-utiliser-cela-au-lieu-de-node-sqlite3