Saltar al contenido

Node.js y Express ​

Sirve para Express, Fastify, Koa, Hono, NestJS y cualquier otro servidor Node.js.

Una aplicación mínima ​

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" }
}

Qué detecta Zenavo ​

zbpack la compila como Node.js:

PasoComando
Instalarnpm install, pnpm install, yarn install o bun install, según el archivo de bloqueo del repositorio (yarn si no hay ninguno)
Compilarel script build, si existe (TypeScript, bundlers)
Arrancarel script start; si no existe, node index.js

La versión de Node.js sale de engines.node en package.json (22 si no está definida):

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

Para usar otros comandos, define ZBPACK_BUILD_COMMAND o ZBPACK_START_COMMAND en Settings → Build → zbpack options (Plan de compilación).

Desplegar ​

  1. Add Service → GitHub, elige el repositorio y la rama.
  2. Añade variables, haz clic en Next, comprueba que la vista previa muestra nodejs y haz clic en Deploy.
  3. Genera un dominio en la pestaña Networking.

Conecta una base de datos ​

Añade una base de datos al proyecto y referencia sus variables desde el servicio de la aplicación:

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

Ejecuta las migraciones cuando arranque la aplicación, no en la compilación: las compilaciones no llegan a las bases de datos del proyecto. Un script predeploy en package.json se ejecuta antes de start cada vez que arranca el servicio:

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

TypeScript ​

Compila en el script build y arranca el resultado:

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

Deja typescript en dependencies o en devDependencies; ambas se instalan para la compilación.

Problemas habituales ​

SíntomaCausa
El despliegue nunca está sanoEl servidor escucha en localhost o en un puerto fijo. Escucha en 0.0.0.0 y en process.env.PORT.
Cannot find module al arrancarEl script start apunta a un archivo que la compilación no generó, o falta una dependencia en package.json.
Se usa otro gestor de paquetesFalta el archivo de bloqueo o hay dos. Deja exactamente uno.
Los archivos subidos desaparecen tras un despliegueEl disco del contenedor se sustituye en cada despliegue. Usa un volumen o almacenamiento de objetos.

Sin relación con Zeabur.