2026-01-29 09:29:41 +02:00

63 lines
1.8 KiB
JavaScript

const http = require('http');
const GO_API_URL = process.env.GO_API_URL || 'http://localhost:8080';
const PORT = process.env.PORT || 3000;
async function fetchJSON(url, options = {}) {
const resp = await fetch(url, options);
return resp.json();
}
const server = http.createServer(async (req, res) => {
// CORS is handled by the gateway — don't set headers here to avoid duplicates
res.setHeader('Content-Type', 'application/json');
if (req.url === '/health') {
res.end(JSON.stringify({ status: 'ok', service: 'node-api', go_api: GO_API_URL }));
return;
}
if (req.url === '/api/notes' && req.method === 'GET') {
try {
const notes = await fetchJSON(`${GO_API_URL}/api/notes`);
res.end(JSON.stringify({
notes,
fetched_at: new Date().toISOString(),
source: 'nodejs-proxy',
go_api: GO_API_URL,
}));
} catch (err) {
res.writeHead(502);
res.end(JSON.stringify({ error: 'Failed to reach Go API', details: err.message }));
}
return;
}
if (req.url === '/api/notes' && req.method === 'POST') {
let body = '';
req.on('data', chunk => body += chunk);
req.on('end', async () => {
try {
const result = await fetchJSON(`${GO_API_URL}/api/notes`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body,
});
res.writeHead(201);
res.end(JSON.stringify(result));
} catch (err) {
res.writeHead(502);
res.end(JSON.stringify({ error: 'Failed to reach Go API', details: err.message }));
}
});
return;
}
res.writeHead(404);
res.end(JSON.stringify({ error: 'not found' }));
});
server.listen(PORT, () => {
console.log(`Node API listening on :${PORT}, proxying to ${GO_API_URL}`);
});