続きです。 何とか動く所まで・・・ふう
npm でセットされている node_modules の構成・・?
拗らせてしまった状況を解きほぐすには、分解しかありません。
package.json を調べます(... 色々やる前に先にやっておけ)。
"dependencies": {
"async": "*",
"bluebird": "^3.7.2",
"body-parser": "~1.13.1",
"config": "^3.3.12",
"cookie-parser": "~1.3.5",
"date-utils": "~1.2.7",
"debug": "~2.2.0",
"ejs": "~2.3.2",
"express": "~4.13.0",
"iconv": "^3.0.1",
"json": "^11.0.0",
"JSON": "^1.0.0",
"morgan": "~1.6.0",
"npm": "^11.1.0",
"pg": "~4",
"pg-promise": "~1.7.0",
"promise": "*",
"serve-favicon": "~2.3.0"
},
- pg-promise がバージョンで縛られているのを見つけました。これは問題かも。
- node_modules/.package-lock.json の抜粋はこんな感じでした。
"node_modules/pg-promise": {
"version": "1.7.8",
"resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-1.7.8.tgz",
"integrity": "sha512-Lebq7VeFSlsEgoPBdvbIEgijrGfoABFaDR0hslGSM8+VjoM0J85i9bnFko+7rFYaVoV7dkMWASYTmuEFnPEKWQ==",
"deprecated": "This version of pg-promise is obsolete. You should update to a newer version.",
"license": "MIT",
"dependencies": {
"pg": "4.x",
"promise": "7.x"
},
"engines": {
"node": ">=0.10",
"npm": ">=1.4"
}
},
"node_modules/pg-promise/node_modules/promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"license": "MIT",
"dependencies": {
"asap": "~2.0.3"
}
},
- github にあるサンプルコードからちょっと書き足しの pg-promise テストコードが動くだけの package.jsの依存記述はこんな感じ。
"dependencies": {
"bluebird": "^3.7.2",
"pg-monitor": "^2.1.0",
"pg-promise": "^11.10.2"
}
- テストが 動けばいいだけですが、2025/02/05 最新版です。
- .package.js
"node_modules/pg-promise": {
"version": "11.10.2",
"resolved": "https://registry.npmjs.org/pg-promise/-/pg-promise-11.10.2.tgz",
"integrity": "sha512-wK4yjxZdfxBmAMcs40q6IsC1SOzdLilc1yNvJqlbOjtm2syayqLDCt1JQ9lhS6yNSgVlGOQZT88yb/SADJmEBw==",
"license": "MIT",
"dependencies": {
"assert-options": "0.8.2",
"pg": "8.13.1",
"pg-minify": "1.6.5",
"spex": "3.4.0"
},
"engines": {
"node": ">=14.0"
},
"peerDependencies": {
"pg-query-stream": "4.7.1"
}
},
- node_modules の依存関係、asset-options,pg-minify,spexが増えてます。まあバージョンが飛んでます、放置すれば整合しないでしょう。
テストすら動かなくなったかの理由を思い出せ → 魔がさして "yarn" を使ってしまった。(ボケすぎ)
- モジュール管理には yarn 、mediawikiで js系のトラブルをyarnで整合させた事を思い出してうっかり動かしたのがありました。 そこで色々壊れた?・・
- 依存関係の調整は 月イチくらいのペースで行っていたらトラブルを招かないかもしれません。手元で日常管理しているものはココまで壊れないのですが・・・。
- ちなみにテスト環境も yarn でモジュール依存関係を再整列させてみましたが、こちらは変化なしでした。
- package.json を整える というのが課題になりそうです → https://qiita.com/alfe_below/items/1141ec9acbb81b504855
テストぐらいは動くようにしてみるぞ。
- package.json
"pg-promise": ^11.10.0.2",
とバージョン縛りを外します・・・
$ npm update
npm error code ERESOLVE
npm error ERESOLVE unable to resolve dependency tree
npm error
npm error While resolving: dataentry@0.0.1
npm error Found: pg@4.5.7
npm error node_modules/pg
npm error pg@"~4" from the root project
npm error
npm error Could not resolve dependency:
npm error peer pg@"^8" from pg-query-stream@4.7.1
npm error node_modules/pg-query-stream
npm error peer pg-query-stream@"4.7.1" from pg-promise@11.10.2
npm error node_modules/pg-promise
npm error pg-promise@"^11.10.2" from the root project
npm error
npm error Fix the upstream dependency conflict, or retry
npm error this command with --force or --legacy-peer-deps
npm error to accept an incorrect (and potentially broken) dependency resolution.
npm error
npm error
- おおっと。取り敢えず --force で。
$ npm update --force
npm warn using --force Recommended protections disabled.
npm warn ERESOLVE overriding peer dependency
npm warn While resolving: pg-query-stream@4.7.1
npm warn Found: pg@4.5.7
npm warn node_modules/pg
npm warn pg@"~4" from the root project
npm warn
npm warn Could not resolve dependency:
npm warn peer pg@"^8" from pg-query-stream@4.7.1
npm warn node_modules/pg-query-stream
npm warn peer pg-query-stream@"4.7.1" from pg-promise@11.10.2
npm warn node_modules/pg-promise
npm warn
npm warn Conflicting peer dependency: pg@8.13.1
npm warn node_modules/pg
npm warn peer pg@"^8" from pg-query-stream@4.7.1
npm warn node_modules/pg-query-stream
npm warn peer pg-query-stream@"4.7.1" from pg-promise@11.10.2
npm warn node_modules/pg-promise
npm warn ERESOLVE overriding peer dependency
added 20 packages, removed 3 packages, changed 1 package, and audited 396 packages in 8s
25 packages are looking for funding
run `npm fund` for details
24 vulnerabilities (3 low, 2 moderate, 16 high, 3 critical)
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
strnh@ryzen5700-pc:~/workdir/dataentry$ node ./controller/query.js
DATA: [
{ uid: 0, name: '', 'id': 0 },
{ uid: 2, name: 'foo', 'id': 2 },
{ uid: 4, name: 'bar', 'id': 4 },
{ uid: 999, name: 'baz', 'id': 999 },
{ uid: 500, name: 'hoge', 'id': 500 },
{ uid: 10001, name: 'fuga', 'id': 10001 },
{ uid: 10002, name: 'piyo', '': 10002 }
]
- テストは動くようになりました。さてさてココからが本番。
routeコードを ES7 で書き換えて自爆
- github copilot に頼んで ES7っぽく書き換えてみたら不整合が・・
- 深い読み解きが必要なエラーです。
$ node --harmony ./bin/www
/home/strnh/workdir/dataentry/node_modules/express/lib/router/index.js:458
throw new TypeError('Router.use() requires middleware function but got a ' + gettype(fn));
^
TypeError: Router.use() requires middleware function but got a Module
at Function.use (/home/strnh/workdir/dataentry/node_modules/express/lib/router/index.js:458:13)
at Function.<anonymous> (/home/strnh/workdir/dataentry/node_modules/express/lib/application.js:219:21)
at Array.forEach (<anonymous>)
at Function.use (/home/strnh/workdir/dataentry/node_modules/express/lib/application.js:216:7)
at Object.<anonymous> (/home/strnh/workdir/dataentry/app.js:31:5)
at Module._compile (node:internal/modules/cjs/loader:1562:14)
at Object..js (node:internal/modules/cjs/loader:1699:10)
at Module.load (node:internal/modules/cjs/loader:1313:32)
at Function._load (node:internal/modules/cjs/loader:1123:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
Node.js v22.13.1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
- このエラーは "entry.js" の記述を変更後に出ます。
- entry.js の 末尾に "export default entry;" とかあります。
- googleで検索すると "module.export = router;" をつければ治るぞてなことが書いてありますが、どうもそれでは解決しないみたいです。
- ちょっと理解が足りてないので助けてもらおう。読みました。→ "Node.jsのmodule.exportsの仕組みを理解する" https://qiita.com/dys7/items/ced9634650b1b43c7de7
- まだなんか理解が足りてないので読みます:https://www.webdesignleaves.com/pr/jquery/node-js-module-exports.html
- どうやら必要そうな内容: https://zenn.dev/youtuber/articles/78c3714de04f00
- そういえば、"router" じゃないと routingしないよねぇ。 なんで entry???
entry.get("/delete", async (req, res, next) => {
const url_parts = url.parse(req.url, true);
const { date: dt } = url_parts.query;
- まさかまさか、copilot さんが "router" という文字を "entry" に全部書き換えてたって? 😯
- s/entry/router/g で 取り敢えず 前に進めそう・・・なんてこったい。
- サービスを立ち上げる前にエラーを吐くのはなくなりましたが・・・
DBアクセスでエラー出るよ(ともあれ解決に進んでいる
node --harmony ./bin/www
start
password: undefined
db..
es: [object Object]
getlastrouterdate:
db.getlastrouterdate()::
date: not specify..
-> 2016/10/07 00:00:00+09
error: relation "jyugyoinmeibo" does not exist
at Parser.parseErrorMessage (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/parser.js:283:98)
at Parser.handlePacket (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/parser.js:122:29)
at Parser.parse (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/parser.js:35:38)
at Socket.<anonymous> (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/index.js:11:42)
at Socket.emit (node:events:524:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23) {
length: 112,
severity: 'ERROR',
code: '42P01',
detail: undefined,
hint: undefined,
position: '18',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'parse_relation.c',
line: '1452',
routine: 'parserOpenTable',
query: 'SELECT name FROM jyugyoinmeibo where ( uid = 10002) ',
params: undefined
}
node:internal/process/promises:394
triggerUncaughtException(err, true /* fromPromise */);
^
error: relation "jyugyoinmeibo" does not exist
at Parser.parseErrorMessage (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/parser.js:283:98)
at Parser.handlePacket (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/parser.js:122:29)
at Parser.parse (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/parser.js:35:38)
at Socket.<anonymous> (/home/strnh/workdir/dataentry/node_modules/pg-protocol/dist/index.js:11:42)
at Socket.emit (node:events:524:28)
at addChunk (node:internal/streams/readable:561:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
at Readable.push (node:internal/streams/readable:392:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23) {
length: 112,
severity: 'ERROR',
code: '42P01',
detail: undefined,
hint: undefined,
position: '18',
internalPosition: undefined,
internalQuery: undefined,
where: undefined,
schema: undefined,
table: undefined,
column: undefined,
dataType: undefined,
constraint: undefined,
file: 'parse_relation.c',
line: '1452',
routine: 'parserOpenTable',
query: 'SELECT name FROM jyugyoinmeibo where ( uid = 10002) ',
params: undefined
}
Node.js v22.13.1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
- これは原因がすぐ分かりました。 DBスキーマ名の不整合でした。クリアしました。
動き出しましたが、さてさて次の難所に来ました。
Failed to lookup view "router" in views directory "/home/strnh/workdir/dataentry/views"
Error: Failed to lookup view "router" in views directory "/home/strnh/workdir/dataentry/views"
at Function.render (/home/strnh/workdir/dataentry/node_modules/express/lib/application.js:579:17)
at ServerResponse.render (/home/strnh/workdir/dataentry/node_modules/express/lib/response.js:961:7)
at /home/hiko/workdir/kojiya2/test/routes/entry.js:87:9
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
- router に全部書き換えてしまったので entry.ejs が読めなくなってる!
解決
以上