Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 27x 27x 27x 27x 102x 102x 102x 414x 414x 414x 102x 102x 102x 102x 102x 102x 102x 102x 102x 102x 102x 102x 102x 102x 8x 102x | const express = require('express');
const hbs = require('hbs');
const path = require('path');
module.exports = {
name: 'express',
options: {
// See these in-depth in https://expressjs.com/en/api.html#app.set
'case sensitive routing': {},
'env': {
inherit: 'env'
},
'etag': {},
'jsonp callback name': {},
'json replacer': {},
'json spaces': {},
'query parser': {},
'strict routing': {},
'subdomain offset': {},
'trust proxy': {},
'views': {
default: 'views',
inherit: true,
type: String,
folder: true
},
'view cache': {},
'view engine': {
inherit: 'engine'
},
'x-powered-by': {}
},
init: async ctx => {
ctx.express = express;
ctx.app = ctx.express();
// Go through all of the options and set the right ones
for (let key in ctx.options.express) {
let value = ctx.options.express[key];
Eif (typeof value !== 'undefined') {
ctx.app.set(key, value);
}
}
// Add the views into the core
Iif (path.resolve(ctx.options.views) === path.resolve(process.cwd())) {
throw new Error(
'The "views" option should point to a subfolder of the project and not the root of it'
);
}
await new Promise(function(resolve, reject) {
hbs.registerPartials(ctx.options.views, function(err) {
Iif (err) reject(err);
resolve();
});
});
// Accept HTML as a render extension
ctx.app.engine('html', hbs.__express);
Eif (ctx.options.engine) {
// If it's an object, expect a { engine: { engineName: engineFN } }
Iif (typeof ctx.options.engine === 'object') {
for (let name in ctx.options.engine) {
ctx.app.engine(name, ctx.options.engine[name]);
ctx.app.set('view engine', name);
}
} else { // Simple case like { engine: 'pug' }
ctx.app.set('view engine', ctx.options.engine);
}
}
},
listen: ctx => new Promise((resolve, reject) => {
ctx.server = ctx.app.listen(ctx.options.port, () => {
ctx.log.debug(`Server started on http://localhost:${ctx.options.port}/`);
resolve();
});
ctx.close = () => new Promise((res, rej) => {
ctx.server.close(err => err ? rej(err) : res());
});
ctx.server.on('error', err => reject(err));
})
};
|