easy-api.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import restify from 'restify';
  2. import redis from 'redis';
  3. import yup from 'yup';
  4. import { checkReqBody, checkParams } from './modules/check-schema.js';
  5. import dbWrapper from './modules/db.js';
  6. import logger from './modules/logging.js';
  7. function registerRoute(db, server, log) {
  8. return function setupRoute(routeSetup) {
  9. const route = routeSetup({ db, yup, log });
  10. if (route.schema) {
  11. switch (route.type) {
  12. case 'get':
  13. server.get(route.route, checkParams(route.schema, log, route.route), route.handler);
  14. break;
  15. case 'post':
  16. server.post(route.route, checkReqBody(route.schema, log, route.route), route.handler);
  17. break;
  18. default:
  19. throw new Error();
  20. }
  21. } else {
  22. switch (route.type) {
  23. case 'get':
  24. server.get(route.route, route.handler);
  25. break;
  26. case 'post':
  27. server.post(route.route, route.handler);
  28. break;
  29. default:
  30. throw new Error();
  31. }
  32. }
  33. };
  34. }
  35. function start(routes, host = '127.0.0.1', port = 8080, dbOpts, serverOpts) {
  36. const client = redis.createClient(dbOpts);
  37. client.on('connect', () => {
  38. logger.info('connected to db, starting server...');
  39. const server = restify.createServer(serverOpts);
  40. const db = dbWrapper(client);
  41. const setupRoute = registerRoute(db, server, logger);
  42. routes.forEach(route => {
  43. setupRoute(route);
  44. });
  45. server.listen(port, host, () => {
  46. logger.info(`${server.name} listening at ${server.url}`);
  47. });
  48. });
  49. }
  50. export default start;