UNPKG

1.51 kBJavaScriptView Raw
1/**
2 * apeman app to serve dynamic contents.
3 * @memberof module:apeman-app-dynamic/lib
4 * @function create
5 * @param {object} [options] - Optional settings.
6 * @param {object} [options.form] - Options for apeman-app-form
7 * @param {object} [options.header] - Options for apeman-app-header
8 * @param {object} [options.json] - Options for apeman-app-json
9 * @param {object} [options.lang] - Options for apeman-app-lang
10 * @param {object} [options.query] - Options for apeman-app-query
11 * @returns {function} - Defined app function.
12 */
13
14"use strict";
15
16const argx = require('argx'),
17 async = require('async'),
18 objnest = require('objnest');
19
20const middlewares = require('./middlewares');
21
22const debug = require('debug')('apeman:app:dynamic');
23
24/** @lends create */
25function create(options) {
26 let args = argx(arguments);
27 options = objnest.expand(args.pop('object') || {});
28
29 let handlers = Object.keys(middlewares).map((key) => {
30 let mw = middlewares[key];
31 return mw.module(options[key] || {});
32 });
33
34 /**
35 * Defined app.
36 * @function app
37 * @param {object} req - Request object.
38 * @param {object} res - Response object.
39 * @param {function} next - Pass to next handler.
40 */
41 function app(req, res, next) {
42 async.eachSeries(handlers, (handler, next) => {
43 handler(req, res, next);
44 }, next);
45 }
46
47 // Description of this app.
48 app.$desc = "Add dynamic content handlers.";
49 return app;
50}
51
52module.exports = create;