Я разрабатываю приложение, используя node.js
. В этом я готов использовать SQLite
как встроенную базу данных. Я искал онлайн для модулей SQLite
npm. Я нашел различные модули:
Из документации и других источников я понял, что (1) работает синхронно, а (2) и (3) работает асинхронно. Итак, я отказался от плана использования (1).
Теперь, я хочу знать, в чем разница между (2) и (3) и какой из них предпочтительнее? Я много гугл, но не мог найти много, чтобы помочь.
Используйте https://github.com/mapbox/node-sqlite3. Он асинхронный (почти обязательный), он наиболее активно поддерживается, и он имеет большинство звезд на GitHub.
В качестве альтернативы вы можете использовать встроенную базу данных javascript. Таким образом вам просто нужно объявить базу данных как зависимость в ваших package.json
и require()
в вашем приложении.
Для моей архитектуры синхронный better-sqlite3
оказался лучше:
https://www.npmjs.com/package/better-sqlite3
[IMG_OUR_ID=1148.svg?style=flat-square] [IMG_OUR_ID=1149.svg?style=flat-square] [IMG_OUR_ID=1150.svg?style=flat-square]
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));
ПРИМЕЧАНИЕ. Пример выше работает только с Node.js v6 и более новым (при условии, что import
и async/await
особенности языка, используемые в код транслируется с помощью Babel). Для более ранних версий Node.js используйте var db = require('sqlite/legacy');
.
Я перешел с https://github.com/mapbox/node-sqlite3 на https://github.com/JoshuaWise/better-sqlite3. Одна из причин - лучший автор sqlites дал мне исчерпывающий ответ: https://github.com/JoshuaWise/better-sqlite3/issues/181, о том, почему https://github.com/JoshuaWise/better-sqlite3#why- должен-я-использование-это-вместо-оф-узел-sqlite3
Модуль Grumdrig, похоже, наиболее употребителен для Qaru и других сайтов.
Кроме того, документация довольно хорошая: http://github.grumdrig.com/node-sqlite/
У меня довольно мало опыта работы с Node SQLite, но сообщество, похоже, выбрало.