diff --git a/config.js b/config.js index 3aab88380442279d7b084208871159902cab5b62..d2a7fad042fa5e010b4f27d010145299fef77cfc 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 d8a4c039ebc6e4789bcd027b0c5981c72f59b7a3..15d5f06af1271cff5cd6b4d6f77c35f3b4d2d6cd 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 a0c2f5b0b9cb9c309518902356e9f746728bca07..5ed3954d7aca930d95dbf46db676683689168a14 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 0000000000000000000000000000000000000000..dcb3789996a5b366c6d179a7a9f95c8fc3f5c723 --- /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 e8d4fa20d7d538cc103d2ee8ac087316a7ac52c3..b9a11002ebd8f876cd838c7d1194e1e60e8dc24d 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 545e3c30602029ba185e6c93d028d0a84c70b8a4..dd3e731281ce0ca934f61a9435630d2efa2bad5e 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 a9182dd263c0743790deb2a2a2baf5202ad227ef..c2bafda36b7890487f94e6dc1b503626e0dfdb75 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 dd5c68b611de6be00f45152b15416122f7943b83..73554cd0daadd1f8ba1af7e00448a9158e194aec 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 66bb183728a4d447e6e7d591ba021ff5ff408c06..b6d5d3baa7f74051f6ab86247a38f53b0f81b5f4 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 2fa08a2f32ea946df5159316d4f89872acb080df..bb98e7937c46bdbf980ae02afabbc3e8b1f29952 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 4abe40770401e621b64e7f655f80bdbde274f2bd..c338603960240090dccdbd6965b2760b1a1c99f6 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