跳到正文

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 无关联。