nitrojs / nitro

Next Generation Server Toolkit. Create web servers with everything you need and deploy them wherever you prefer.
https://nitro.build
MIT License
6.24k stars 514 forks source link

API server HMR seems to crash (with `node-java`) #2223

Open puzzle-it-nu opened 8 months ago

puzzle-it-nu commented 8 months ago

Environment

Nodejs 20.10.0, relevant part of my package.json

"dependencies": {
    "java": "github:joeferner/node-java#v0.14.0",
    "nuxt": "^3.10.3",
    "vue": "^3.4.19",
    "vue-router": "^4.3.0"
  },
  "devDependencies": {
    "node-jdbc-driver": "^1.3.2",
    "nodejs-jdbc": "^0.1.4",
    "sql-ddl-to-json-schema": "^4.1.0"
  },
  "overrides": {
    "java": "$java"
  }

Reproduction

Because it uses Java it seems not possible to make a reproduction on Stackblitz, it tries to compile using node-gyp. I can provide a repo if needed. For a repro see below.

Describe the bug

Changing a server api route and saving it causes a HMR to occur after which the API server crashes.

Additional context

This is the last part of DEBUG=* npm run dev where the nuxt api dev server is ready to accept requests. The next few lines are from a request to the /api/version endpoint which returns the version of the jdbc.jar that is currently loaded. Then I edit and save the version endpoint, add an ! to the return text, and the HMR is triggered but then the dev server seems to internally crash because redoing the curl request leads to the unhandledRejection.

I tried debugging the devserver and it seems that cleaning up the worker thread is where things go haywire but I don't know how to debug that part.

The cause of the problem is probably the Java instance that is started but that shouldn't lead to crashes IMHO :-) Its probably not related to the specific jdbc driver that I use, sqlite3 jdbc driver has the same problem and that also excludes network problems as a probable cause.

Logs

ℹ Vite server warmed up in 1557ms                                                                                                        2:10:00 PM
[nitro] types:extend: 0.015ms                                                                                                             2:10:00 PM
✔ Nuxt Nitro server built in 937 ms                                                                                                nitro 2:10:01 PM
[nitro] compiled: 0.351ms                                                                                                                 2:10:01 PM
[nuxt] build:done: 2.270s                                                                                                                 2:10:01 PM
winston:create-logger: Define prototype method for "error"
[nitro] dev:reload: 243.772ms                                                                                                             2:10:01 PM
winston:create-logger: Define prototype method for "warn"
winston:create-logger: Define prototype method for "info"
winston:create-logger: Define prototype method for "http"
winston:create-logger: Define prototype method for "verbose"
winston:create-logger: Define prototype method for "debug"
winston:create-logger: Define prototype method for "silly"
custom
Custom driver
> Nitro Start (47ms)
  connect:dispatcher <anonymous>  : /api/version +2m
  connect:dispatcher viteTimeMiddleware  : /api/version +0ms
  connect:dispatcher viteCachedTransformMiddleware  : /api/version +0ms
  connect:dispatcher viteBaseMiddleware  : /api/version +1ms
  connect:dispatcher viteHMRPingMiddleware  : /api/version +0ms
  connect:dispatcher viteServePublicMiddleware  : /api/version +0ms
  connect:dispatcher handle  : /api/version +0ms
  connect:dispatcher viteTransformMiddleware  : /api/version +0ms
  vite:resolve 0.26ms /__skip_vite/api/version -> null +2m
  connect:dispatcher viteServeRawFsMiddleware  : /api/version +1ms
  connect:dispatcher viteServeStaticMiddleware  : /api/version +0ms
  connect:dispatcher viteErrorMiddleware  : /api/version +0ms
  send stat "/home/PUZZLE-IT/joop/dev/gbbeheer-nuxt3/.nuxt/dist/client/api/version" +0ms
  send stat "/home/PUZZLE-IT/joop/dev/gbbeheer-nuxt3/public/api/version" +2ms
[nitro-runtime] request: 0.285ms
  vite:time 16.16ms /api/version +0ms
[nitro-runtime] beforeResponse: 0.013ms
[nitro-runtime] afterResponse: 0.029ms
[nuxt] builder:watch: 1.153ms                                                                                                             2:11:49 PM
  vite:hmr [file change] server/api/version.ts +2m
  vite:hmr [no modules matched] server/api/version.ts +1ms
✔ Nuxt Nitro server built in 220 ms                                                                                                nitro 2:11:49 PM
[nitro] compiled: 0.405ms                                                                                                                 2:11:49 PM
[nitro-runtime] close: 0.057ms

 ERROR  [unhandledRejection] connect ECONNREFUSED 127.0.0.1:42271                                                                         2:12:53 PM

  at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1595:16)
puzzle-it-nu commented 8 months ago

Repro Repo

puzzle-it-nu commented 8 months ago

:+1:

puzzle-it-nu commented 2 months ago

I see people having similar problems in Nuxt: https://github.com/nuxt/nuxt/issues/23832 Tried all the variations in that thread, none worked :-(