Node.js & Express
Berlaku untuk Express, Fastify, Koa, Hono, NestJS, dan server Node.js lainnya.
Aplikasi minimal
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" }
}Apa yang dideteksi Zenavo
zbpack membangunnya sebagai Node.js:
| Langkah | Perintah |
|---|---|
| Instal | npm install, pnpm install, yarn install, atau bun install, mengikuti lockfile di repositori (yarn bila tidak ada) |
| Build | skrip build, bila ada (TypeScript, bundler) |
| Start | skrip start; bila tidak ada, node index.js |
Versi Node.js diambil dari engines.node di package.json (22 bila tidak diatur):
json
"engines": { "node": "22" }Untuk memakai perintah lain, atur ZBPACK_BUILD_COMMAND atau ZBPACK_START_COMMAND di Settings → Build → zbpack options (Rencana Build).
Deploy
- Add Service → GitHub, pilih repositori dan branch.
- Tambahkan variabel, klik Next, pastikan pratinjau menampilkan nodejs, lalu klik Deploy.
- Buat domain di tab Networking.
Hubungkan database
Tambahkan database ke proyek dan rujuk variabelnya dari layanan aplikasi:
sh
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}
REDIS_URL=${REDIS_CONNECTION_STRING}Jalankan migrasi saat aplikasi mulai, bukan saat build: build tidak bisa menjangkau database proyek. Skrip predeploy di package.json berjalan sebelum start setiap kali layanan mulai:
json
"scripts": {
"predeploy": "node migrate.js",
"start": "node server.js"
}TypeScript
Kompilasi di skrip build lalu jalankan hasilnya:
json
"scripts": {
"build": "tsc",
"start": "node dist/server.js"
}Simpan typescript di dependencies atau devDependencies; keduanya dipasang untuk build.
Masalah umum
| Gejala | Penyebab |
|---|---|
| Deployment tidak pernah sehat | Server mendengarkan di localhost atau port tetap. Dengarkan di 0.0.0.0 dan process.env.PORT. |
Cannot find module saat start | Skrip start menunjuk file yang tidak dihasilkan build, atau ada dependensi yang tidak tercantum di package.json. |
| Package manager yang dipakai salah | Lockfile tidak ada atau ada dua. Simpan tepat satu. |
| File yang diunggah hilang setelah deploy | Disk kontainer diganti di setiap deploy. Gunakan volume atau object storage. |