配置環境變量區分開發環境和生產環境

  1. 在根目錄下創建config文件夾
  2. 在config文件夾中創建config.js文件
module.exports = {
  // dev表示開發環境 prod表示生產環境
  environment: 'dev'
}
  1. 在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
  1. 在異常處理文件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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章