app.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. const fs = require('fs')
  2. var express = require('express')
  3. var bodyParser = require('body-parser')
  4. var path = require('path')
  5. // 路由加载
  6. var mount = require('mount-routes')
  7. var app = express()
  8. /**
  9. *
  10. * 公共系统初始化
  11. *
  12. */
  13. app.use(bodyParser.json())
  14. app.use(bodyParser.urlencoded({ extended: true }))
  15. // 初始化数据库模块
  16. var database = require('./modules/database')
  17. database.initialize(app, function(err) {
  18. if (err) {
  19. console.error('连接数据库失败失败 %s', err)
  20. }
  21. })
  22. /**
  23. *
  24. * 后台管理系统初始化
  25. *
  26. */
  27. // 获取管理员逻辑模块
  28. var managerService = require(path.join(process.cwd(), 'services/ManagerService'))
  29. // 获取角色服务模块
  30. var roleService = require(path.join(process.cwd(), 'services/RoleService'))
  31. // 设置跨域和相应数据格式
  32. app.all('/api/*', function(req, res, next) {
  33. res.header('Access-Control-Allow-Origin', '*')
  34. res.header('Access-Control-Allow-Headers', 'X-Requested-With, mytoken')
  35. res.header('Access-Control-Allow-Headers', 'X-Requested-With, Authorization')
  36. res.setHeader('Content-Type', 'application/json;charset=utf-8')
  37. res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept,X-Requested-With')
  38. res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
  39. res.header('X-Powered-By', ' 3.2.1')
  40. if (req.method == 'OPTIONS') res.send(200)
  41. /*让options请求快速返回*/ else next()
  42. })
  43. // 初始化统一响应机制
  44. var resextra = require('./modules/resextra')
  45. app.use(resextra)
  46. // 初始化 后台登录 passport 策略
  47. admin_passport = require('./modules/passport')
  48. // 设置登录模块的登录函数衔接 passport 策略
  49. admin_passport.setup(app, managerService.login)
  50. // 设置 passport 登录入口点
  51. app.use('/api/private/v1/login', admin_passport.login)
  52. // 设置 passport 验证路径
  53. app.use('/api/private/v1/*', admin_passport.tokenAuth)
  54. // 获取验证模块
  55. var authorization = require(path.join(process.cwd(), '/modules/authorization'))
  56. // 设置全局权限
  57. authorization.setAuthFn(function(req, res, next, serviceName, actionName, passFn) {
  58. if (!req.userInfo || isNaN(parseInt(req.userInfo.rid))) return res.sendResult('无角色ID分配')
  59. // 验证权限
  60. roleService.authRight(req.userInfo.rid, serviceName, actionName, function(err, pass) {
  61. passFn(pass)
  62. })
  63. })
  64. /**
  65. *
  66. * 初始化路由
  67. *
  68. */
  69. // 带路径的用法并且可以打印出路有表
  70. mount(app, path.join(process.cwd(), '/routes'), true)
  71. app.all('/ueditor/ue', function(req, res, next) {
  72. res.header('Access-Control-Allow-Origin', '*')
  73. res.header('Access-Control-Allow-Headers', 'X-Requested-With, mytoken')
  74. res.header('Access-Control-Allow-Headers', 'X-Requested-With, Authorization')
  75. res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With, X_Requested_With')
  76. res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS')
  77. res.header('X-Powered-By', ' 3.2.1')
  78. if (req.method == 'OPTIONS') res.send(200)
  79. /*让options请求快速返回*/ else next()
  80. })
  81. // 富文本编辑器上传
  82. var ueditor = require(path.join(process.cwd(), '/modules/ueditor'))
  83. // 富文本控件处理qing q
  84. app.use('/ueditor/ue', ueditor)
  85. //. 设置富文本空间地址
  86. app.use('/ueditor', express.static('public/ueditor'))
  87. app.use('/tmp_uploads', express.static('tmp_uploads'))
  88. app.use('/x/common', express.static('uploads/common'))
  89. app.use('/uploads/goodspics', express.static('uploads/goodspics'))
  90. var upload_config = require('config').get('upload_config')
  91. app.use('/' + upload_config.get('upload_ueditor'), express.static(upload_config.get('upload_ueditor')))
  92. const logistics = require('./modules/Logistics.js')
  93. app.get('/api/private/v1/kuaidi/:orderno', logistics.getLogisticsInfo)
  94. // 定义日志
  95. // var log4js = require('./modules/logger');
  96. // log4js.use(app);
  97. /**
  98. *
  99. * 统一处理无响应
  100. *
  101. */
  102. // 如果没有路径处理就返回 Not Found
  103. app.use(function(req, res, next) {
  104. res.sendResult(null, 404, 'Not Found')
  105. })
  106. app.listen(8888)
  107. module.exports = app