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
|
const routerList = []; const logger = require('../log/logger');
function Route(params) { return function (target) { try { const methodObj = target.prototype; if(routerList.filter(v => v.prefix === params) !== []) { routerList.push(Object.assign({ prefix: params }, methodObj)); } else throw new Error('the same route name is not allow'); } catch (e) { logger.error(e); } }; }
module.exports = { Route, routerList, };
const logger = require('../log/logger');
const method = ['GET', 'POST', 'PUT', 'DELETE']; let methodList = []; const totalMethod = {}; method.forEach((v) => { totalMethod[v] = function (params) { methodList = []; return function (target, name, descriptor) { try { const old = descriptor.value; methodList.push({ method: v.toLowerCase(), path: params, handle: old }); target.methodList = methodList; descriptor.value = function () { return old(...arguments); }; return descriptor; } catch (e) { logger.error(e); } }; }; });
module.exports = totalMethod;
routerList.forEach((routerItem) => { const router = require('express').Router(); const { methodList } = routerItem;
methodList.forEach((methodDescription) => { const { method, path, handle } = methodDescription; router[method](path, (req, res) => { handle(req, res); }); });
app.use(routerItem.prefix, router); });
const { Route } = require('../core/collection-router'); const { GET, PUT } = require('../core/http-method');
@Route('/user') class User { @GET('/:id') findWordBy(req, res) { const { params } = req; res.send(params.id); }
@PUT('/:id') updateWordBy(req, res) { const { params } = req; res.send(params.id); } }
module.exports = { UserRouter: User };
|