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 | ;
|
15 |
|
16 | var argx = require('argx'),
|
17 | async = require('async'),
|
18 | objnest = require('objnest');
|
19 |
|
20 | var middlewares = require('./middlewares');
|
21 |
|
22 | /** @lends create */
|
23 | function create(options) {
|
24 | var args = argx(arguments);
|
25 | options = objnest.expand(args.pop('object') || {});
|
26 |
|
27 | var handlers = Object.keys(middlewares).map(function (key) {
|
28 | var mw = middlewares[key];
|
29 | return mw.module(options[key] || {});
|
30 | });
|
31 |
|
32 | /**
|
33 | * Defined app.
|
34 | * @function app
|
35 | * @param {object} req - Request object.
|
36 | * @param {object} res - Response object.
|
37 | * @param {function} next - Pass to next handler.
|
38 | */
|
39 | function app(req, res, next) {
|
40 | async.eachSeries(handlers, function (handler, next) {
|
41 | handler(req, res, next);
|
42 | }, next);
|
43 | }
|
44 |
|
45 | // Description of this app.
|
46 | app.$desc = "Add dynamic content handlers.";
|
47 | return app;
|
48 | }
|
49 |
|
50 | module.exports = create;
|