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(建置方案)。
部署
- 新增服務 → GitHub,選擇儲存庫和分支。
- 新增變數,點選 下一步,確認預覽顯示 nodejs,然後點選 部署。
- 在 網路 分頁生成網域。
連線資料庫
在專案中新增資料庫,並在應用的服務中引用它的變數:
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 module | start 指令碼指向的檔案沒有被建置出來,或者 package.json 中缺少某個依賴。 |
| 使用了錯誤的套件管理器 | 缺少鎖檔案,或者有兩個鎖檔案。只保留一個。 |
| 上傳的檔案在部署後消失 | 每次部署都會替換容器的磁碟。請使用儲存卷或物件儲存。 |