-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathyang-web-store.js
More file actions
49 lines (42 loc) · 1.56 KB
/
yang-web-store.js
File metadata and controls
49 lines (42 loc) · 1.56 KB
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
/*
YANG-EXPRESS (web server) middleware router module
This YANG model-driven module enables dynamic web server middleware
interface generation such as [restjson](restjson.coffee) and
[openapi](openapi.coffee).
It utilizes the [express](http://expressjs.com) web server framework
to dynamically instanticate the web server and makes itself
available for higher-order features to utilize it for associating
additional routing endpoints.
*/
require('yang-js');
module.exports = require('./yang-web-store.yang').bind({
'feature(express)': require('express'),
'feature(body-parser)': require('body-parser'),
'feature(multipart)': require('multer'),
'feature(discover)': require('./lib/discover'),
'feature(restjson)': require('./lib/restjson'),
'feature(openapi)': require('./lib/openapi'),
'/server/hostname': {
get: (ctx) => ctx.use('os').hostname()
},
'rpc(listen)': (ctx, input) => {
const express = ctx.use('express');
const discover = ctx.use('discover');
const { app=express() } = input;
const server = ctx.get('/server');
const { routers=[], modules=[], port } = server;
ctx.logInfo(`listen on ${port} with %o routers for %o modules`, routers, modules);
app.use(discover({ modules, store: ctx.store }));
for (let routerName of routers) {
const router = ctx.use(routerName);
if (!router) continue
app.use(router());
app.enable(routerName);
ctx.logDebug(`enabled ${routerName} router`)
}
app.set('json spaces', 2)
return {
instance: app.listen(port)
}
}
})