Golangで作成したSQLiteのテーブルをnode.jsからアクセスしてみようと思ったが、前提になるnpmが起動できないし、nodeも起動できない。
% node
dyld[71646]: Library not loaded: /opt/homebrew/opt/icu4c/lib/libicui18n.71.dylib
Referenced from: <66A3E1EC-93E2-36D1-889D-02EE5C192FCC> /opt/homebrew/Cellar/node/18.11.0/bin/node
Reason: tried: ‘/opt/homebrew/opt/icu4c~~~~以下省略
解決方法は、
から、
% brew reinstall icu4c
で解決。
・Node.jsからSQLiteへアクセスするドライバーをインストール
% npm install sqlite3
・すでに存在しているテーブルにアクセスしてみる、
//
// DB handler
//
'use strict';
const sqlite3 = require("sqlite3");
const db = new sqlite3.Database("./myfare.db");
db.serialize(() => {
db.each("select * from tbl202382 where stat=0", (err, row) => {
console.log(`${row.id} ${row.name}`);
})
});
db.close();
do.run()が非同期実行なのでsierialize()が必要とのことですが、データ更新してなくて読んでるだけで並行処理されるものがないから実はserialize()はこのケースでは不要。
しかし実行すると、
Error: Cannot find module ‘sqlite3’
対策はパスを通すことらしいので、
% export NODE_PATH=`npm root -g`
で、
% echo $NODE_PATH
/opt/homebrew/lib/node_modules
にsqlite3は存在していますが、
% which sqlite3
とは違うディレクトリなので実はシンボリックリンクを使っているのかもしれない。
ともかくもSQLite3のテーブルアクセスはできた。