29 lines
733 B
JavaScript
29 lines
733 B
JavaScript
|
|
// Small HTTP helpers shared across the server.
|
||
|
|
const now = () => Date.now();
|
||
|
|
|
||
|
|
const json = (res, code, body) => {
|
||
|
|
res.writeHead(code, { 'Content-Type': 'application/json' });
|
||
|
|
res.end(JSON.stringify(body));
|
||
|
|
};
|
||
|
|
|
||
|
|
function readBody(req) {
|
||
|
|
return new Promise((resolve) => {
|
||
|
|
let data = '';
|
||
|
|
req.on('data', (c) => (data += c));
|
||
|
|
req.on('end', () => {
|
||
|
|
try { resolve(data ? JSON.parse(data) : {}); } catch { resolve({}); }
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function parseCookies(req) {
|
||
|
|
const out = {};
|
||
|
|
(req.headers.cookie || '').split(';').forEach((c) => {
|
||
|
|
const [k, ...v] = c.trim().split('=');
|
||
|
|
if (k) out[k] = decodeURIComponent(v.join('='));
|
||
|
|
});
|
||
|
|
return out;
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = { now, json, readBody, parseCookies };
|