init.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const polkadot = require('polkadot');
  2. const XSS = require('html-escaper');
  3. const helper = require('./helper');
  4. const { DATABASE } = process.env;
  5. const DRIVER = DATABASE && require(`./drivers/${DATABASE}`);
  6. polkadot(async (req, res) => {
  7. res.setHeader('Server', 'Polkadot');
  8. if (req.path === '/json') {
  9. res.setHeader('Content-Type', 'application/json');
  10. return { message: 'Hello, World!' };
  11. }
  12. if (req.path === '/plaintext') {
  13. return 'Hello, World!';
  14. }
  15. if (DRIVER) {
  16. if (req.path === '/db') {
  17. res.setHeader('Content-Type', 'application/json');
  18. return DRIVER.find(helper.random());
  19. }
  20. if (req.path === '/queries') {
  21. let arr=[], num=helper.parse(req.query.queries);
  22. while (num-- > 0) arr.push(DRIVER.find(helper.random()));
  23. res.setHeader('Content-Type', 'application/json');
  24. return Promise.all(arr);
  25. }
  26. if (req.path === '/fortunes') {
  27. const items = await DRIVER.fortunes();
  28. items.push(helper.fortune);
  29. items.sort((a, b) => a.message.localeCompare(b.message));
  30. let i=0, html='<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>';
  31. for (; i < items.length; i++) html += `<tr><td>${items[i].id}</td><td>${XSS.escape(items[i].message)}</td></tr>`;
  32. html += '</table></body></html>';
  33. res.setHeader('Content-Type', 'text/html; charset=utf-8');
  34. return html;
  35. }
  36. if (req.path === '/updates') {
  37. let reads=[], num=helper.parse(req.query.queries);
  38. while (num-- > 0) reads.push(DRIVER.find(helper.random()));
  39. const rows = await Promise.all(reads);
  40. let i=0, writes=[];
  41. for (; i < rows.length; i++) {
  42. rows[i].randomNumber = helper.random();
  43. writes.push(DRIVER.update(rows[i]));
  44. }
  45. await Promise.all(writes);
  46. res.setHeader('Content-Type', 'application/json');
  47. return rows;
  48. }
  49. }
  50. }).listen(8080, '0.0.0.0', err => {
  51. if (err) throw err;
  52. console.log(`Worker started and listening on http://0.0.0.0:8080 ${new Date().toISOString()}`);
  53. });