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 中缺少某个依赖。 |
| 使用了错误的包管理器 | 缺少锁文件,或者有两个锁文件。只保留一个。 |
| 上传的文件在部署后消失 | 每次部署都会替换容器的磁盘。请使用数据卷或对象存储。 |