博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KOA2项目脚手架优化
阅读量:6608 次
发布时间:2019-06-24

本文共 2276 字,大约阅读时间需要 7 分钟。

参考了一些项目结构,对之前从用KOA2开发的项目 提取出来的脚手架进行了一下改造。Github上有很多Koa2的脚手架,大多数都差不多,相比如Think.jsEgg.js这些封装得很完整的框架这些脚手架适用于一些比较简单的项目,当然可以一开始就使用Think.js或者Egg.js来开发项目,但是经常折腾一下还是有好处的

脚手架项目地址:

1、Controller改造

router单独提取到独立的文件,Controller只保留业务逻辑相关的代码

改造前的Controller

import ApiError from '../error/ApiError'import ApiErrorNames from '../error/ApiErrorNames'export default async router => {  router.get('/api/userInfo/:id', userInfo).get('/api/userList', userList)}async function userInfo (ctx, next) {  if (Number(ctx.params.id) !== 1) {    throw new ApiError(ApiErrorNames.USER_NOT_EXIST)  }  ctx.body = { id: 1, name: 'twj', age: 18 }}async function userList (ctx, next) {  ctx.body = [{ name: 'twj0', age: 18 }, { name: 'twj1', age: 19 }]  await next()}复制代码

改造后的Controller

import ApiError from '../error/ApiError'import ApiErrorNames from '../error/ApiErrorNames'class UserController {  async userInfo (ctx, next) {    if (Number(ctx.params.id) !== 1) {      throw new ApiError(ApiErrorNames.USER_NOT_EXIST)    }    ctx.body = { id: 1, name: 'twj', age: 18 }  }  async userList (ctx, next) {    ctx.body = [{ name: 'twj0', age: 18 }, { name: 'twj1', age: 19 }]    await next()  }}export default new UserController()复制代码

userRouter

import userController from '../controllers/UserController'export default async router => {  router    .get('/api/userInfo/:id', userController.userInfo)    .get('/api/userList', userController.userList)}复制代码

2、Router优化

之前每新建一个router都需要手动到index.js里面添加一个initXXX进行手动初始化

import initUser from './user.js'export default router => {  initUser(router)}复制代码

router单独提取之后就可以统一读取注入了

import routesLoader from '../utils/routesLoader'export default router => {  routesLoader(`${__dirname}`).then(routersList => {    console.log('initRouter')    routersList.forEach(initRouter => {      initRouter.default(router)    })  })}复制代码

routesLoader通过使用glob模块来读取routes文件夹下的所有路由配置,然后自动初始化路由。routesLoader实现:

import glob from 'glob'export default function (dirname) {  return new Promise((resolve, reject) => {    const routers = []    glob(`${dirname}/*`, { ignore: '**/index.js' }, (err, files) => {      if (err) {        reject(err)      }      files.forEach(file => {        const router = require(file)        routers.push(router)      })      resolve(routers)    })  })}复制代码

这样就基本改造完成啦

转载地址:http://hzsso.baihongyu.com/

你可能感兴趣的文章
PAT (Advanced Level) 1028. List Sorting (25)
查看>>
【转】聚集索引和非聚集索引的区别
查看>>
【转】mac os 安装php
查看>>
C# DllImport的用法
查看>>
Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
查看>>
no identities are available for signing
查看>>
javascript 和 jquery插件开发
查看>>
Linux Shell文件差集
查看>>
eclipse中如何去除警告:Class is a raw type. References to generic type Class<T> should be parameterized...
查看>>
Gradle脚本基础全攻略
查看>>
Django模版中的过滤器详细解析 Django filter大全
查看>>
Linux中使用pwconv实现passwd中密码到shadow
查看>>
MongoDB C++ gridfs worked example
查看>>
Visual Studio 2017各版本安装包离线下载
查看>>
C#线程安全的那些事
查看>>
【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks
查看>>
rpm安装PostgreSQL
查看>>
k sum(lintcode)
查看>>
28. extjs中Ext.BLANK_IMAGE_URL的作用
查看>>
Android 控件属性
查看>>