mirror of
https://github.com/DeBrosOfficial/network.git
synced 2026-01-30 22:23:03 +00:00
63 lines
1.8 KiB
JavaScript
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}`);
|
|
});
|