forked from Chinlinlee/Burni
-
Notifications
You must be signed in to change notification settings - Fork 0
/
routes.js
105 lines (91 loc) · 3.51 KB
/
routes.js
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
const fs = require('fs');
const _ = require("lodash");
const {
handleError
} = require('./models/FHIR/httpMessage');
const FHIR = require('fhir').Fhir;
const { pluginsConfig } = require("./plugins/config");
function setFormatWhenQuery(req, res) {
let format = _.get(req, "query._format");
if (format && format.includes("xml")) {
res.set('Content-Type', 'application/fhir+xml');
} else if (format && format.includes("json")) {
res.set('Content-Type', 'application/fhir+json');
}
delete req['query']['_format'];
}
function doPrettyJson(app, req) {
let pretty = _.get(req, "query._pretty", false);
if (pretty === "true") {
app.set('json spaces', 4);
} else {
app.set('json spaces', 0);
}
}
module.exports = function (app) {
app.set('json spaces', 4);
//#region fhir
let fhirDir = fs.readdirSync("./api/FHIR");
for (let dir of fhirDir) {
let isDir = fs.lstatSync(`./api/FHIR/${dir}`).isDirectory();
if (isDir) {
app.use(`/${process.env.FHIRSERVER_APIPATH}/${dir}`, (req, res, next) => {
try {
// default JSON format
res.set('Content-Type', 'application/fhir+json');
if (req.headers["content-type"]) {
if (req.headers["content-type"].includes("xml")) {
res.set('Content-Type', 'application/fhir+xml');
if (req.method == "POST" || req.method == "PUT") {
let Fhir = new FHIR();
req.body = Fhir.xmlToObj(req.body);
}
}
}
_.get(req.headers, "accept") ? "" : (() => {
_.get(req.headers, "content-type") ? _.set(req.headers, "accept", _.get(req.headers, "content-type")) : _.set(req.headers, "accept", "application/fhir+json");
})();
let xmlAcceptList = [
"application/xml",
"application/fhir+xml",
"xml"
];
if (xmlAcceptList.includes(req.headers.accept)) {
res.set('Content-Type', 'application/fhir+xml');
} else {
res.set('Content-Type', 'application/fhir+json');
}
setFormatWhenQuery(req, res);
doPrettyJson(app, req);
next();
} catch (e) {
return res.send(handleError.exception(e));
}
});
}
}
//#endregion
for(let pluginName in pluginsConfig) {
let plugin = pluginsConfig[pluginName];
if (plugin.before && plugin.enable) require(`plugins/${pluginName}`)(app);
}
app.use('/', require('web/index'));
//#region fhir
for (let dir of fhirDir) {
let isDir = fs.lstatSync(`./api/FHIR/${dir}`).isDirectory();
if (isDir) {
app.use(`/${process.env.FHIRSERVER_APIPATH}/${dir}`, require(`./api/FHIR/${dir}`));
}
}
//#endregion
app.route('/:url(api|auth|web)/*').get((req, res) => {
res.status(404).json({
status: 404,
message: "not found"
});
});
for (let pluginName in pluginsConfig) {
let plugin = pluginsConfig[pluginName];
if(!plugin.before && plugin.enable) require(`plugins/${pluginName}`)(app);
}
};