0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

10年放置した expressjs アプリの修復 後編

Last updated at Posted at 2025-02-03

続きです。 何とか動く所まで・・・ふう

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.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 が読めなくなってる!

解決

  • 何とか動きました・・・
    Screenshot 2025-02-03 at 20-19-46 鍍金液分析結果.png

  • メッキ屋さんなんでこんなデータを集めていました。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?