- 在根目錄下創建config文件夾
- 在config文件夾中創建config.js文件
module.exports = {
// dev表示開發環境 prod表示生產環境
environment: 'dev'
}
- 在init.js中全局導入環境變量
const requireDirectory = require('require-directory')
const Router = require('koa-router')
class InitManger {
static InitCore (app){
InitManger.app = app
InitManger.InitLoadRouters()
InitManger.InitLoadConfig()
}
static InitLoadRouters () {
// 參數:第一個參數固定參數module,第二個參數要加載的模塊的文件路徑,第三個參數:每次加載一個參數執行的函數
// 在node.js中process.cwd()方法可以獲取項目的根路徑
const Url = `${process.cwd()}/app/api`
const modules = requireDirectory(module, Url, {visit:whenModuleLoad})
function whenModuleLoad (obj) {
if(obj instanceof Router){
InitManger.app.use(obj.routes())
}
}
}
static InitLoadConfig (path = '') {
const configPath = path || process.cwd() + '/config/config.js'
const config = require(configPath)
global.config = config
}
}
module.exports = InitManger
- 在異常處理文件exception.js中使用
const {HttpException} = require('../core/http-exception')
const catchError = async (ctx, next)=>{
try {
await next()
} catch (error) {
if( global.config.environment === 'dev' ) {
throw error
}
if(error instanceof HttpException){
ctx.body = {
msg: error.msg,
error_code: error.errorCode,
requestUrl: `${ctx.method} ${ctx.path}`
}
ctx.status = error.code
} else {
// 未知異常處理
ctx.body = {
msg: 'we made a mistake',
error_code: 999,
requestUrl: `${ctx.method} ${ctx.path}`
}
ctx.status = 5000
}
}
}
module.exports = catchError