init
This commit is contained in:
53
src/service/index.js
Normal file
53
src/service/index.js
Normal file
@@ -0,0 +1,53 @@
|
||||
const event = require('events');
|
||||
const serviceMap = require('./serviceMap');
|
||||
const { auth } = require('./middleware');
|
||||
// const Provider = require('../common/Provider')
|
||||
class ServiceManager extends event {
|
||||
constructor(props = {}) {
|
||||
mylog.info('初始化服务控制器...');
|
||||
super(props);
|
||||
this._map = serviceMap;
|
||||
this.middleWares = [
|
||||
auth
|
||||
];
|
||||
}
|
||||
static getInstance() {
|
||||
if(!ServiceManager.instance) {
|
||||
ServiceManager.instance = new ServiceManager();
|
||||
}
|
||||
return ServiceManager.instance;
|
||||
}
|
||||
|
||||
get ServiceMap() {
|
||||
return this._map;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @desc 注册一个服务
|
||||
* @param {*} [service={}]
|
||||
* @param {String} path // 路由地址
|
||||
* @param {String} type // HTTP请求类型['GET','POST','PUT'...]
|
||||
* @param {Function} handler //处理函数
|
||||
* @memberof ServiceManager
|
||||
*/
|
||||
regist(service = {}) {
|
||||
const { version, ...main } = service;
|
||||
this._map[version].push(main);
|
||||
}
|
||||
|
||||
mountService(route, version) {
|
||||
mylog.info('开始挂载中间价...');
|
||||
this.middleWares.map(fn => {
|
||||
route.use(fn);
|
||||
});
|
||||
mylog.info('开始挂载服务...');
|
||||
if (this.ServiceMap[version] && this.ServiceMap[version].length !== 0) {
|
||||
this.ServiceMap[version].map(service => {
|
||||
route[service.method.toLowerCase()](service.url, service.controller);
|
||||
});
|
||||
}
|
||||
return route;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ServiceManager.getInstance();
|
||||
27
src/service/middleware.js
Normal file
27
src/service/middleware.js
Normal file
@@ -0,0 +1,27 @@
|
||||
const { inject } = require('../common/Provider');
|
||||
const { verifyToken, createToken } = require('../utils/jwt');
|
||||
const ignoreToken = ['/sign/check', '/sign/in', '/sign/up', '/sign/forget', '/sign/send', '/sign/changePwd', '/sign/code'];
|
||||
module.exports = {
|
||||
auth: inject(function (SysConfig) {
|
||||
const { JWT_SECRET } = SysConfig;
|
||||
return async (req, res, next) => {
|
||||
const token = req.headers.token;
|
||||
if(!ignoreToken.includes(req.path)) {
|
||||
if (token) {
|
||||
const deToken = await verifyToken(token, JWT_SECRET);
|
||||
if(deToken) {
|
||||
res.locals.user = deToken.data;
|
||||
// 换发新token,存在问题:如果上一个token没过期,其他人截获了的话,会不会被盗用?
|
||||
res.set('token', createToken({
|
||||
userId: deToken.userId
|
||||
}, JWT_SECRET, {}));
|
||||
return next();
|
||||
}
|
||||
}
|
||||
return res.status(403).send('unauthorized');
|
||||
} else {
|
||||
next();
|
||||
}
|
||||
};
|
||||
})
|
||||
};
|
||||
20
src/service/serviceMap.js
Normal file
20
src/service/serviceMap.js
Normal file
@@ -0,0 +1,20 @@
|
||||
// 根服务map,读取所有模块导出的服务map,按照版本进行切分后提供给ServiceManager
|
||||
const fs = require('fs');
|
||||
|
||||
fs.readdirSync('./src/modules').map(m => {
|
||||
if (fs.existsSync(`./src/modules/${m}/${m}.service.js`)) {
|
||||
require(`../modules/${m}/${m}.service.js`);
|
||||
}
|
||||
});
|
||||
|
||||
const modules = module.children
|
||||
.reduce((acc, c) => {
|
||||
if (c && c.exports && c.exports.length) {
|
||||
return acc.concat(c.exports);
|
||||
}
|
||||
return acc;
|
||||
}, []).filter(m => m.controller !== undefined);
|
||||
|
||||
module.exports = {
|
||||
v1: modules
|
||||
};
|
||||
Reference in New Issue
Block a user