跳到正文

Node.js 與 Express ​

適用於 Express、Fastify、Koa、Hono、NestJS 以及任何其他 Node.js 伺服器。

最小應用 ​

js
// server.js
const express = require('express')

const app = express()
const port = process.env.PORT || 8080

app.get('/', (req, res) => res.send('Hello from Express'))

app.listen(port, '0.0.0.0', () => console.log(`listening on ${port}`))
json
{
  "scripts": { "start": "node server.js" },
  "dependencies": { "express": "^5.1.0" }
}

Zenavo 識別出的內容 ​

zbpack 把它建置為 Node.js:

步驟指令
安裝根據儲存庫中的鎖檔案使用 npm install、pnpm install、yarn install 或 bun install(沒有鎖檔案時用 yarn)
建置有 build 指令碼時執行它(TypeScript、打包工具)
啟動start 指令碼;沒有時執行 node index.js

Node.js 版本取自 package.json 中的 engines.node(未設定時為 22):

json
"engines": { "node": "22" }

要使用其他指令,在 設定 → 建置 → zbpack 選項 中設定 ZBPACK_BUILD_COMMAND 或 ZBPACK_START_COMMAND(建置方案)。

部署 ​

  1. 新增服務 → GitHub,選擇儲存庫和分支。
  2. 新增變數,點選 下一步,確認預覽顯示 nodejs,然後點選 部署。
  3. 在 網路 分頁生成網域。

連線資料庫 ​

在專案中新增資料庫,並在應用的服務中引用它的變數:

sh
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}
REDIS_URL=${REDIS_CONNECTION_STRING}

資料庫遷移請在應用啟動時執行,不要放在建置中:建置存取不到專案的資料庫。package.json 中的 predeploy 指令碼會在每次服務啟動時、start 之前執行:

json
"scripts": {
  "predeploy": "node migrate.js",
  "start": "node server.js"
}

TypeScript ​

在 build 指令碼中編譯,然後啟動編譯輸出:

json
"scripts": {
  "build": "tsc",
  "start": "node dist/server.js"
}

typescript 放在 dependencies 或 devDependencies 中都可以;建置時兩者都會安裝。

常見問題 ​

現象原因
部署一直不健康伺服器監聽的是 localhost 或固定連接埠。請監聽 0.0.0.0 和 process.env.PORT。
啟動時報 Cannot find modulestart 指令碼指向的檔案沒有被建置出來,或者 package.json 中缺少某個依賴。
使用了錯誤的套件管理器缺少鎖檔案,或者有兩個鎖檔案。只保留一個。
上傳的檔案在部署後消失每次部署都會替換容器的磁碟。請使用儲存卷或物件儲存。

與 Zeabur 無關聯。