Início rápido — Com banco de dados
Publique uma aplicação Node.js conectada a um banco PostgreSQL gerenciado.
Nota: Este quickstart foca em
PostgreSQL. ParaMariaDB, use os guias específicos dessa engine.
Passo 1 — Crie o banco PostgreSQL
- No console, crie um banco PostgreSQL gerenciado.
- Escolha a versão desejada entre as opções disponíveis no console.
- Copie a URI completa ou os dados de conexão exibidos.
- Guarde a URI para configurar a variável
DATABASE_URLno projeto HTTP.
Importante: A Zenifra não injeta
DATABASE_URLautomaticamente na sua aplicação. Essa configuração deve ser feita manualmente no projeto HTTP antes da publicação ou em um novo deploy.
Passo 2 — Crie sua aplicação
mkdir zenifra-api
cd zenifra-api
npm init -y
npm install express pg dotenvCrie index.js:
const express = require('express');
const { Pool } = require('pg');
const app = express();
app.use(express.json());
// Conecta ao PostgreSQL gerenciado usando a ENV configurada manualmente no console
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
app.get('/', async (req, res, next) => {
let client;
try {
client = await pool.connect();
const { rows } = await client.query('SELECT NOW() as now');
res.json({ database_time: rows[0].now });
} catch (error) {
next(error);
} finally {
if (client) client.release();
}
});
app.post('/todos', async (req, res, next) => {
const { task } = req.body;
let client;
try {
client = await pool.connect();
await client.query(
'CREATE TABLE IF NOT EXISTS todos (id SERIAL PRIMARY KEY, task TEXT, done BOOLEAN DEFAULT false)'
);
const { rows } = await client.query('INSERT INTO todos (task) VALUES ($1) RETURNING *', [task]);
res.status(201).json(rows[0]);
} catch (error) {
next(error);
} finally {
if (client) client.release();
}
});
app.use((error, req, res, next) => {
console.error(error);
res.status(500).json({ error: 'Internal server error' });
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, '0.0.0.0', () => {
console.log(`API running on port ${PORT}`);
});Passo 3 — Publique via GitHub
- Crie um repositório no GitHub.
- No console, escolha Origem de Projeto como Repositório GitHub.
- No campo de runtime, selecione
Node.js. - No campo Porta, informe
3000. - Configure a variável de ambiente
DATABASE_URLcom a URI do PostgreSQL criada no passo 1. - Configure os comandos de build e start do projeto.
- Se desejar atualização automática por push, habilite
auto-deployna criação. - Selecione a branch principal e clique em Criar Projeto.
- Faça push do código para a branch escolhida.
Se o projeto HTTP já existir, salve a variável DATABASE_URL nele e publique uma nova versão para que a aplicação leia a ENV atualizada.
Passo 4 — Teste
Use a URL do projeto em *.clients.zenifra.com e valide a aplicação.
Verifique se a aplicação está no ar:
curl https://seu-projeto.clients.zenifra.com/healthVerifique a conexão com o banco:
curl https://seu-projeto.clients.zenifra.com/Crie um item para validar escrita no PostgreSQL:
curl -X POST https://seu-projeto.clients.zenifra.com/todos \
-H 'Content-Type: application/json' \
-d '{"task":"Build something cool"}'Resposta:
{ "id": 1, "task": "Build something cool", "done": false }Variáveis de ambiente
Para esse fluxo, configure manualmente pelo menos estas variáveis e campos:
| Variável | Descrição |
|---|---|
DATABASE_URL | String de conexão do PostgreSQL copiada do console |
Porta | Campo da criação do projeto HTTP, que deve refletir a porta usada pela aplicação |
ZENIFRA_INSTANCE_VERSION | Variável injetada pela Zenifra com a versão da instância publicada |
Acesso ao banco
Use a URI completa ou os dados de conexão fornecidos no console para conectar sua aplicação ou ferramentas externas ao PostgreSQL gerenciado.