Ucenter
github地址
上一年接手了一个开发oauth2的鉴权服务器的项目,基于drywall开发的,但是drywall的工程目录用起来十分不顺手,所以私底下用koa2写了重构了用户中心,支持单账号多app,在这里分享下我的开发心得。 有事出去一下,就先分享下模型设计和目录结构吧~ ?? 为什么表格显示都是乱的?预览是正常的?
逻辑流程
留坑
程序设计
留坑
model设计
模型设计的表格显示都少了一列,等我搞清楚原因再放上来吧,github上面的模型设计是正常的
工程目录
common
- const.js 存放静态变量
- error.map.js 存放错误码
config
- config.dev.js 存放开发环境配置
- config.workong.js 开发环境配置示例
- config.production.js 存放生产环境配置
- index.js 根据运行环境返回配置文件
controller 业务逻辑存放的文件目录
dao 数据库代理文件夹
- mongo 对mongo的数据操作
- sql 对sql的数据操作
- redis 对redis的数据操作
logs 日志文件夹
midware
- filter 该文件夹下的文件基于业务分类,封装了每个接口的数据过滤中间件
- auth.js 验证中间件,验证token的合法性等用途
- log.js 我使用的是使用log4js,所以基于业务配置了不同的appender
这里放一点代码解释会实际一点
const log4js = require('log4js'), adminLogger = log4js.getLogger('admin'), oauthLogger = log4js.getLogger('oauth'), commonLogger = log4js.getLogger('common'), userLogger = log4js.getLogger('user'); var user = async(ctx, next) => { ctx.logger = userLogger; await next() };
model 数据库model定义
router 路由定义
service 第三方服务等封装,例如我把密码加密,验证放在了这里做成一个服务,token也封装成一个服务,这样以后更改密码加密形式或者token加密形式的时候就可以直接在这里改。
- passport.js
var bcrypt = require('bcrypt'); var Promise = require('bluebird'); var config = require('../config'); Promise.promisifyAll(bcrypt); /** * 加盐加密 * @param password {string} 原始密码 * @return hash {object} 加密密码 * @author gh */ var encrypt = async function(password) { var salt = await bcrypt.genSaltAsync(config.password.saltTimes); var hash = await bcrypt.hashAsync(password, salt); return hash; }; /** * 密码对比 * @param password {string} 原始密码 * @param hash {string} 加密密码 * @return res {boolean} 比对结果 true:密码匹配 | false:密码不匹配 * @author gh */ var validate = async function(password, hash) { var res = await bcrypt.compareAsync(password, hash); return res }; module.exports = { encrypt, validate }
- passport.js
test 测试用例文件夹
util 工具类的封装