リレーショナルデータベース
リレーショナルデータベースは、環境構築が容易な SQLite を利用する。
SQLite そのものを別途インストールする必要はなく
$ npm i sqlite3@4.2.0
と入力したら大量のメッセージが!
$ npm i > leveldown@5.6.0 install /path/to/todo-data-storage/node_modules/leveldown > node-gyp-build ... + sqlite3@4.2.0
package.json
を開くとパッケージ名が書かれている。問題なくインストールできたようです。
... "dependencies": { "express": "^4.17.1", "isomorphic-fetch": "^3.0.0", "nodemon": "^2.0.6", "sqlite3": "^4.2.0", "uuid": "^8.1.0" }, ...
node-sqlite3 には
The module uses node-pre-gyp to download a pre-compiled binary for your platform, if it exists. Otherwise, it uses node-gyp to build the extension.
node-pre-gyp がよきに計らってくれたと理解した。
データの更新と削除
UPDATE 文は WHERE 句に該当する行が存在しなくてもエラーを返しません。
DELETE 文も WHERE 句に該当する行が存在しなくてもエラーを返さない
オリジナルの db.run() のコールバック関数の this を参照できません。 db.run() の Promise 化はこのことを考慮して、 util.promisify() は使わず独自に実装する必要があります。
「sqlite3 では」との但し書きがないので、リレーショナルデータベース全般で起こりうるのだろう。文字通り受け取っておく。
SQL 文で WHERE 句を使うことになるので、ありがたくコードを拝借します。