From 06f665b220389606dfdc74b659e674ac12e750d5 Mon Sep 17 00:00:00 2001 From: Flummi Date: Fri, 26 Apr 2019 09:23:16 +0000 Subject: [PATCH] async/await --- src/inc/admin.mjs | 25 +++++----- src/inc/routes/api.mjs | 101 ++++++++++++++++++++++----------------- src/inc/routes/index.mjs | 20 ++++---- src/websrv.mjs | 2 +- 4 files changed, 82 insertions(+), 66 deletions(-) diff --git a/src/inc/admin.mjs b/src/inc/admin.mjs index f2170c2..5631dd5 100644 --- a/src/inc/admin.mjs +++ b/src/inc/admin.mjs @@ -5,19 +5,18 @@ export let admins = []; export const loadAdmins = async () => { const db = await sql; admins = []; - db.query(`select * from user`) - .then(rows => rows.forEach(row => { - admins.push({ - id: row.id, - prefix: row.prefix, - account: row.account, - network: row.network, - level: row.level - }); - })) - .catch(err => { - console.log("keine Admins vorhanden", err); - }); + try { + const rows = await db.query("select id, prefix, account, level, network from user"); + rows.forEach(row => admins.push({ + id: row.id, + prefix: row.prefix, + account: row.account, + network: row.network, + level: row.level + })); + } catch(err) { + console.log("keine Admins vorhanden", err); + } }; (async () => { diff --git a/src/inc/routes/api.mjs b/src/inc/routes/api.mjs index 7ce072a..6614e47 100644 --- a/src/inc/routes/api.mjs +++ b/src/inc/routes/api.mjs @@ -10,11 +10,9 @@ router.get(/^\/api$/, (req, res) => { router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, res) => { const db = await sql; + const args = []; let q = queries.random.main; - let args = []; - res.writeHead(200, { 'Content-Type': 'text/html' }); - if(req.url.split[2] === "user") { q += queries.random.where("username like ?"); args.push(req.url.split[3] || "flummi"); @@ -22,59 +20,76 @@ router.get(/^\/api\/random(\/user\/.+|\/image|\/video|\/audio)?$/, async (req, r else q += queries.random.where(mimes[req.url.split[2]] ? mimes[req.url.split[2]].map(mime => `mime = "${mime}"`).join(" or ") : null); - db.query(q, args) - .then(rows => { - res.end(JSON.stringify(rows.length > 0 ? rows[0] : []), 'utf-8'); - }).catch(err => res.end(JSON.stringify( err ), 'utf-8')); + try { + const rows = await db.query(q, args); + res + .writeHead(200, { 'Content-Type': 'application/json' }) + .end(JSON.stringify(rows.length > 0 ? rows[0] : []), 'utf-8'); + } catch(err) { + res + .writeHead(500) + .end(JSON.stringify(err), 'utf-8'); + } }); -//router.get(/^\/api\/p(\/[0-9]+|\/)?(\/[0-9]+)?$/, async (req, res) => { router.get(/^\/api\/p$/, async (req, res) => { const db = await sql; const id = parseInt(req.url.qs.id) || 99999999; const eps = Math.min(parseInt(req.url.qs.eps) || 100, 200); - db.query("select * from f0ck.items where id < ? order by id desc limit ?", [id, eps]) - .then(rows => { - let items = { - "items": [], - "last": id - }; - rows.forEach(e => { - items.items.push({ - "id": e.id, - "mime": e.mime - }); - items.last = e.id; - }); - res.writeHead(200, { 'Content-Type': 'text/html' }); - res.end(JSON.stringify(items), 'utf-8'); - }).catch(err => res.end(JSON.stringify( err ), 'utf-8')); + const [ order, trend ] = req.url.qs.order === "asc" ? [ "asc", ">" ] : [ "desc", "<" ]; + + try { + const rows = await db.query(`select id, mime from f0ck.items where id ${trend} ? order by id ${order} limit ?`, [ id, eps ]); + const items = { + items: rows, + first: rows[0].id, + last: rows[rows.length - 1].id + }; + res + .writeHead(200, { 'Content-Type': 'application/json' }) + .end(JSON.stringify(items), 'utf-8'); + } catch(err) { + res + .writeHead(500) + .end(JSON.stringify(err), 'utf-8'); + } }); router.get(/^\/api\/item\/[0-9]+$/, async (req, res) => { const db = await sql; - db.query(queries.item, Array(3).fill(req.url.split[2])) - .then(rows => { - const data = rows[0].length > 0 ? { - ...rows[0][0], ...{ - thumb: `${cfg.main.url}/t/${rows[0][0].id}.png`, - next: rows[1].length ? rows[1][0].id : null, - prev: rows[2].length ? rows[2][0].id : null, - } - } : { - error: true - }; - res.writeHead(200, { 'Content-Type': 'text/html' }); - res.end(JSON.stringify(data), 'utf-8'); - }).catch(err => res.end(JSON.stringify( err ), 'utf-8')); + try { + const rows = await db.query(queries.item, Array(3).fill(req.url.split[2])); + const data = rows[0].length > 0 ? { + ...rows[0][0], ...{ + thumb: `${cfg.main.url}/t/${rows[0][0].id}.png`, + next: rows[1].length ? rows[1][0].id : null, + prev: rows[2].length ? rows[2][0].id : null, + } + } : { + error: true + }; + res + .writeHead(200, { 'Content-Type': 'application/json' }) + .end(JSON.stringify(data), 'utf-8'); + } catch(err) { + res + .writeHead(500) + .end(JSON.stringify(err), 'utf-8'); + } }); -router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { +router.get(/^\/api\/user\/.*(\/[0-9]+)?$/, async (req, res) => { // auf qs umstellen const db = await sql; const user = req.url.split[2]; const eps = Math.min(req.url.split[3] || 50, 50); - db.query(queries.user, [ user, eps ]) - .then(rows => { - res.end(JSON.stringify(rows.length > 0 ? rows : []), 'utf-8'); - }).catch(err => res.end(JSON.stringify( err ), 'utf-8')); + try { + const rows = await db.query(queries.user, [ user, eps ]); + res + .writeHead(200, { 'Content-Type': 'application/json' }) + .end(JSON.stringify(rows.length > 0 ? rows : []), 'utf-8'); + } catch(err) { + res + .writeHead(500) + .end(JSON.stringify(err), 'utf-8'); + } }); diff --git a/src/inc/routes/index.mjs b/src/inc/routes/index.mjs index 4e95f6e..3267232 100644 --- a/src/inc/routes/index.mjs +++ b/src/inc/routes/index.mjs @@ -9,14 +9,16 @@ const template = fs.readFileSync("./views/index.hbs", "utf-8"); router.get(/^\/$/, async (req, res) => { const db = await sql; - res.writeHead(200, { 'Content-Type': 'text/html' }); - db.query(queries.items) - .then(items => { - const tpl = handlebars.compile(template); - res.end(tpl({ items: items, debug: JSON.stringify(req.url, null, 2) })); - }).catch(err => res.end(JSON.stringify( err ), 'utf-8')); - - /*const tpl = handlebars.compile(template); - res.end(tpl());*/ + try { + const rows = await db.query(queries.items); + const tpl = handlebars.compile(template); + res + .writeHead(200, { 'Content-Type': 'text/html' }) + .end(tpl({ items: rows, debug: JSON.stringify(req.url, null, 2) })); + } catch(err) { + res + .writeHead(500) + .end(JSON.stringify(err), 'utf-8'); + } }); diff --git a/src/websrv.mjs b/src/websrv.mjs index d7282eb..57fdd1b 100644 --- a/src/websrv.mjs +++ b/src/websrv.mjs @@ -16,5 +16,5 @@ http.createServer((req, res, r) => { console.log(`[${(new Date()).toLocaleTimeString()}] ${req.method} ${req.url.pathname}`); - !(r = routes.getRegex(req.url.pathname, req.method)) ? res.end(`404 - ${req.url.pathname}`) : r(req, res); + !(r = routes.getRegex(req.url.pathname, req.method)) ? res.writeHead(404).end(`404 - ${req.url.pathname}`) : r(req, res); }).listen(cfg.websrv.port, () => console.log(`f0ck is listening on port ${cfg.websrv.port}.`));