From 9a2f0ed231e5d60e0c938a4304ee44e917a911c9 Mon Sep 17 00:00:00 2001 From: Athanasios <ath.kouk.oid@gmail.com> Date: Sat, 17 Apr 2021 12:13:05 +0200 Subject: [PATCH] Complete service --- config.js | 3 ++- routes/nodes.js | 36 ++++++++++++++++++++++++++++++------ routes/scenelayers.js | 2 +- src/attributes.js | 19 +++++++++++++++++++ src/default.js | 10 +++------- src/features.js | 10 +++------- src/geometries.js | 10 +++------- src/handler.js | 6 ++++-- src/layer.js | 9 ++------- src/shared.js | 10 +++------- views/sceneLayers.pug | 2 +- 11 files changed, 71 insertions(+), 46 deletions(-) create mode 100644 src/attributes.js diff --git a/config.js b/config.js index 3aab883..d2a7fad 100644 --- a/config.js +++ b/config.js @@ -4,8 +4,9 @@ module.exports = { FOLDER_INDEX: { SCENELAYER: "3dSceneLayer.json.gz", NODE: "3dNodeIndexDocument.json.gz", + SHARED: "sharedResource.json.gz", FEATURES: "0.json.gz", GEOMETRIES: "0.bin.gz", - SHARED: "sharedResource.json.gz" + ATTRIBUTES: "0.bin.gz" } }; \ No newline at end of file diff --git a/routes/nodes.js b/routes/nodes.js index d8a4c03..15d5f06 100644 --- a/routes/nodes.js +++ b/routes/nodes.js @@ -3,19 +3,43 @@ const getHandler = require('../src/handler'); let router = express.Router(); -router.route("/").get((req, res) => { +router.route("/:nodeid/?").get((req, res) => { - res.sendStatus(404); - res.end(); + let param = req.params.nodeid; + let handler = getHandler(param); + handler(req, res); + +}); + +router.route("/:nodeid/:resource").get((req, res) => { + + let param = req.params.resource; + let handler = getHandler(param); + handler(req, res); }); -router.route("[/]?*/:leaf").get((req, res) => { +router.route("/:nodeid/:resource/0").get((req, res) => { - let leaf = req.params.leaf; - let handler = getHandler(leaf); + let param = req.params.resource; + let handler = getHandler(param); handler(req, res); }); +router.route("/:nodeid/:resource/:resourceid/0").get((req, res) => { + + let param = req.params.resource; + let handler = getHandler(param); + handler(req, res); + +}); + +router.route("*").get((req, res) => { + + res.sendStatus(404); + res.end(); + +}); + module.exports = router; \ No newline at end of file diff --git a/routes/scenelayers.js b/routes/scenelayers.js index a0c2f5b..5ed3954 100644 --- a/routes/scenelayers.js +++ b/routes/scenelayers.js @@ -22,7 +22,7 @@ router.route("/").get((req, res) => { }); -router.route("/:layer").get((req, res) => { +router.route("/:layer/layers/0").get((req, res) => { let handler = getHandler("layer"); handler(req, res); diff --git a/src/attributes.js b/src/attributes.js new file mode 100644 index 0000000..dcb3789 --- /dev/null +++ b/src/attributes.js @@ -0,0 +1,19 @@ +const config = require('../config'); +const fs = require('fs'); + +const handle = (req, res) => { + + let baseUrl = req.baseUrl.replace(/^\/?|\/?$/g, ""); + let resourse = `${config.BASE_DIR}/${baseUrl}/${req.params.nodeid}/${req.params.resource}/${req.params.resourceid}/${config.FOLDER_INDEX.ATTRIBUTES}`; + if (!fs.existsSync(resourse)) throw new Error("not found"); + + res.set({ + 'Content-Disposition': 'attachment; filename=0.bin', + 'Content-Type': 'application/octet-stream', + 'Content-Encoding': 'gzip' + }); + res.sendFile(resourse); + +}; + +module.exports = handle; \ No newline at end of file diff --git a/src/default.js b/src/default.js index e8d4fa2..b9a1100 100644 --- a/src/default.js +++ b/src/default.js @@ -3,13 +3,9 @@ const fs = require('fs'); const handle = (req, res) => { - let resourse = `${config.BASE_DIR}${req.originalUrl}/${config.FOLDER_INDEX.NODE}`; - - if (!fs.existsSync(resourse)) { - res.sendStatus(404); - res.end(); - return; - } + let originalUrl = req.originalUrl.replace(/^\/?|\/?$/g, ""); + let resourse = `${config.BASE_DIR}/${originalUrl}/${config.FOLDER_INDEX.NODE}`; + if (!fs.existsSync(resourse)) throw new Error("not found"); res.set({ 'Content-Type': 'application/json', diff --git a/src/features.js b/src/features.js index 545e3c3..dd3e731 100644 --- a/src/features.js +++ b/src/features.js @@ -3,13 +3,9 @@ const fs = require('fs'); const handle = (req, res) => { - let resourse = `${config.BASE_DIR}${req.originalUrl}/${config.FOLDER_INDEX.FEATURES}`; - - if (!fs.existsSync(resourse)) { - res.sendStatus(404); - res.end(); - return; - } + let baseUrl = req.baseUrl.replace(/^\/?|\/?$/g, ""); + let resourse = `${config.BASE_DIR}/${baseUrl}/${req.params.nodeid}/${req.params.resource}/${config.FOLDER_INDEX.FEATURES}`; + if (!fs.existsSync(resourse)) throw new Error("not found"); res.set({ 'Content-Type': 'application/json', diff --git a/src/geometries.js b/src/geometries.js index a9182dd..c2bafda 100644 --- a/src/geometries.js +++ b/src/geometries.js @@ -3,13 +3,9 @@ const fs = require('fs'); const handle = (req, res) => { - let resourse = `${config.BASE_DIR}${req.originalUrl}/${config.FOLDER_INDEX.GEOMETRIES}`; - - if (!fs.existsSync(resourse)) { - res.sendStatus(404); - res.end(); - return; - } + let baseUrl = req.baseUrl.replace(/^\/?|\/?$/g, ""); + let resourse = `${config.BASE_DIR}/${baseUrl}/${req.params.nodeid}/${req.params.resource}/${config.FOLDER_INDEX.GEOMETRIES}`; + if (!fs.existsSync(resourse)) throw new Error("not found"); res.set({ 'Content-Disposition': 'attachment; filename=0.bin', diff --git a/src/handler.js b/src/handler.js index dd5c68b..73554cd 100644 --- a/src/handler.js +++ b/src/handler.js @@ -1,15 +1,17 @@ const _default_ = require('./default'); +const shared = require('./shared'); const features = require('./features'); const geometries = require('./geometries'); -const shared = require('./shared'); +const attributes = require('./attributes'); const layer = require('./layer'); const layers = require('./layers'); const handlers = { _default_: _default_, + shared: shared, features: features, geometries: geometries, - shared: shared, + attributes: attributes, layer: layer, layers: layers } diff --git a/src/layer.js b/src/layer.js index 66bb183..b6d5d3b 100644 --- a/src/layer.js +++ b/src/layer.js @@ -3,13 +3,8 @@ const fs = require('fs'); const handle = (req, res) => { - let resourse = `${config.BASE_DIR}/scenelayers/${req.params.layer}/${config.FOLDER_INDEX.SCENELAYER}`; - - if (!fs.existsSync(resourse)) { - res.sendStatus(404); - res.end(); - return; - } + let resourse = `${config.BASE_DIR}/scenelayers/${req.params.layer}/layers/0/${config.FOLDER_INDEX.SCENELAYER}`; + if (!fs.existsSync(resourse)) throw new Error("not found"); res.set({ 'Content-Type': 'application/json', diff --git a/src/shared.js b/src/shared.js index 2fa08a2..bb98e79 100644 --- a/src/shared.js +++ b/src/shared.js @@ -3,13 +3,9 @@ const fs = require('fs'); const handle = (req, res) => { - let resourse = `${config.BASE_DIR}${req.originalUrl}/${config.FOLDER_INDEX.SHARED}`; - - if (!fs.existsSync(resourse)) { - res.sendStatus(404); - res.end(); - return; - } + let baseUrl = req.baseUrl.replace(/^\/?|\/?$/g, ""); + let resourse = `${config.BASE_DIR}/${baseUrl}/${req.params.nodeid}/${req.params.resource}/${config.FOLDER_INDEX.SHARED}`; + if (!fs.existsSync(resourse)) throw new Error("not found"); res.set({ 'Content-Type': 'application/json', diff --git a/views/sceneLayers.pug b/views/sceneLayers.pug index 4abe407..c338603 100644 --- a/views/sceneLayers.pug +++ b/views/sceneLayers.pug @@ -7,4 +7,4 @@ style. ul each layer in layers li - a(href=`${layer}`)= layer \ No newline at end of file + a(href=`${layer}/layers/0`)= layer \ No newline at end of file -- GitLab