UNPKG

@napp/dti-server

Version:

data transaction interface server library

113 lines (112 loc) 3.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DtiServerRoute = void 0; const dti_core_1 = require("@napp/dti-core"); class DtiServerRoute { constructor(meta, server) { this.meta = meta; this.server = server; this.base62 = new dti_core_1.Base62(); } param(action, req) { var _a; let mode = action.meta.getMode(); if (mode === dti_core_1.DtiMode.QString) { return req.query; } else if (mode === dti_core_1.DtiMode.QJson) { try { let p = (_a = req.query) === null || _a === void 0 ? void 0 : _a.p; if (p) { let json = this.base62.decode(p); return JSON.parse(json); } } catch (error) { } return {}; } else if (mode === dti_core_1.DtiMode.BJson || mode === dti_core_1.DtiMode.BFrom) { return req.body; } throw new Error('not supported mode'); } callAction(sa, req, res, next) { try { let param = this.param(sa, req); sa.validation(param); return sa.action(param, { req, res }) .then(rsu => { if (dti_core_1.DtiRawResponse.is(rsu) === false) { return res.json(rsu); } }) .catch(err => next(err)); } catch (error) { return next(error); } } setupAction(expressRoute, action, setuper) { let mode = action.meta.getMode(); let path = action.meta.getPath(); let endpoint = (req, res, next) => { this.callAction(action, req, res, next); }; if (mode === dti_core_1.DtiMode.QString || mode === dti_core_1.DtiMode.QJson) { expressRoute.get(path, endpoint); } else if (mode === dti_core_1.DtiMode.BJson) { if (setuper.factoryBodyparseJson) { expressRoute.post(path, [setuper.factoryBodyparseJson(), endpoint]); } else { throw new Error('not define server.factoryBodyparseJson'); } } else if (mode === dti_core_1.DtiMode.BFrom) { if (setuper.factoryBodyparseUrlencode) { expressRoute.post(path, [setuper.factoryBodyparseUrlencode(), endpoint]); } else { throw new Error('not define server.factoryBodyparseUrlencode'); } } else { throw new Error("not support methid. logic error"); } } setupActions(expressRoute, setuper) { let actions = this.meta.getActions(); for (let a of actions) { let name = a.getFullname(); let action = this.server.getActionByName(name); if (action) { this.setupAction(expressRoute, action, setuper); } else { console.warn(`not registered server action. action(${name})`); } } } setupRaws(expressRoute, setuper) { let name = this.meta.getFullname(); let handles = this.server.getRawByName(name); if (Array.isArray(handles)) { for (let handle of handles) { handle(expressRoute); } } } setup(setuper) { let pRoute = setuper.factoryExpressRouter(this.meta); this.setupActions(pRoute, setuper); this.setupRaws(pRoute, setuper); for (let dtiRoute of this.meta.getChildroutes()) { let lRoute = new DtiServerRoute(dtiRoute, this.server).setup(setuper); pRoute.use(dtiRoute.getLocalPath(), lRoute); } return pRoute; } } exports.DtiServerRoute = DtiServerRoute;