| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import restify from 'restify';
- import redis from 'redis';
- import yup from 'yup';
- import { checkReqBody, checkParams } from './modules/check-schema.js';
- import dbWrapper from './modules/db.js';
- import logger from './modules/logging.js';
- function registerRoute(db, server, log) {
- return function setupRoute(routeSetup) {
- const route = routeSetup({ db, yup, log });
- if (route.schema) {
- switch (route.type) {
- case 'get':
- server.get(route.route, checkParams(route.schema, log, route.route), route.handler);
- break;
- case 'post':
- server.post(route.route, checkReqBody(route.schema, log, route.route), route.handler);
- break;
- default:
- throw new Error();
- }
- } else {
- switch (route.type) {
- case 'get':
- server.get(route.route, route.handler);
- break;
- case 'post':
- server.post(route.route, route.handler);
- break;
- default:
- throw new Error();
- }
- }
- };
- }
- function start(routes, host = '127.0.0.1', port = 8080, dbOpts, serverOpts) {
- const client = redis.createClient(dbOpts);
- client.on('connect', () => {
- logger.info('connected to db, starting server...');
- const server = restify.createServer(serverOpts);
- const db = dbWrapper(client);
- const setupRoute = registerRoute(db, server, logger);
- routes.forEach(route => {
- setupRoute(route);
- });
- server.listen(port, host, () => {
- logger.info(`${server.name} listening at ${server.url}`);
- });
- });
- }
- export default start;
|