UNPKG

1.85 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.query] - Options for apeman-app-query
8 * @param {object} [options.header] - Options for apeman-app-header
9 * @param {object} [options.lang] - Options for apeman-app-lang
10 * @param {object} [options.location] - Options for apeman-app-location
11 * @param {object} [options.format] - Options for apeman-app-format
12 * @param {object} [options.redirect] - Options for apeman-app-redirect
13 * @param {object} [options.json] - Options for apeman-app-json
14 * @param {object} [options.html] - Options for apeman-app-html
15 * @param {object} [options.send] - Options for apeman-app-send
16 * @returns {function} - Defined app function.
17 */
18
19"use strict";
20
21const argx = require('argx'),
22 async = require('async'),
23 objnest = require('objnest');
24
25const middlewares = require('./middlewares');
26
27const debug = require('debug')('apeman:app:dynamic');
28
29/** @lends create */
30function create(options) {
31 let args = argx(arguments);
32 options = objnest.expand(args.pop('object') || {});
33
34 let handlers = Object.keys(middlewares).map((key) => {
35 let mw = middlewares[key];
36 return mw.module(options[key] || {});
37 });
38
39 /**
40 * Defined app.
41 * @function app
42 * @param {object} req - Request object.
43 * @param {object} res - Response object.
44 * @param {function} next - Pass to next handler.
45 */
46 function app(req, res, next) {
47 async.eachSeries(handlers, (handler, next) => {
48 handler(req, res, next);
49 }, next);
50 }
51
52 // Description of this app.
53 app.$desc = "Add dynamic content handlers.";
54 return app;
55}
56
57module.exports = create;