nodejs+koa2.x+MongoDB入门实战教程(七)顶层路由设计

138 阅读3分钟

不以风骚惊天下,偶以技术渡佳人。

大家好,我是奶挺老师,江湖人称莒巭萎(lvbuwei),嘿嘿嘿,我又来叨扰大家了。

一个好的设计,顶两个好的开发。这句话不是没有道理的,这里不是吹嘘产品设计和UI设计哈,这里是吹咱们的架构设计。

前面几节课我们已经掌握了koa基本的用法和数据库的操作,但是当我们真正开发一个项目时,首先要做的就是设计,包括数据库设计、框架设计、路由设计等。本节课给大家带来的是koa中顶层路由设计。。。听着很牛逼的样子哈

回顾我们的koa-router章节,我们所有路由都写在了app.js中,这样的写法虽不会出什么大的bug,但是当项目功能逐步丰富,代码越来越多。当路由越来越复杂的时候,我们看着满屏的get、post会不会想吐。。。所以这时候我们需要对路由进行重新设计。

路由结构

# ...
└── server # 后端代码目录
    └── routers
        ├── admin.js # /admin/* 子路由
        ├── api.js #  resetful /api/* 子路由
        ├── error.js #   /error/* 子路由
        ├── home.js # 主页子路由
        ├── index.js # 子路由汇总文件
        └── work.js # /work/* 子路由
 # ...

子路由配置

resetful API 子路由

例如api子路由/user/getUserInfo.json,整合到主路由,加载到中间件后,请求的路径会是 http://域名/api/user/getUserInfo.json。

./server/routers/api.js

/**
 * restful api 形式的子路由
 */
const router = require('koa-router')()
const userInfoController = require('./../controllers/user-info')
const routers = router
  .get('/user/getUserInfo.json', userInfoController.getLoginUserInfo)
  .post('/user/signIn.json', userInfoController.signIn)
  .post('/user/signUp.json', userInfoController.signUp)
module.exports = routers

子路由汇总

./server/routers/index.js

/**
 * 统一封装整合所有子路由
 */
const router = require('koa-router')()
const home = require('./home')
const api = require('./api')
const admin = require('./admin')
const work = require('./work')
const error = require('./error')
router.use('/', home.routes(), home.allowedMethods())
router.use('/api', api.routes(), api.allowedMethods())
router.use('/admin', admin.routes(), admin.allowedMethods())
router.use('/work', work.routes(), work.allowedMethods())
router.use('/error', error.routes(), error.allowedMethods())
module.exports = router

app.js加载子路由

./server/app.js

...
const routers = require('./routers/index')
// 初始化路由中间件
app.use(routers.routes()).use(routers.allowedMethods())
...

这样我们把路由拆开分割,是不是就清晰了很多啊,后期维护的时候我们也可以根据页面去维护了,我们的视图文件目录结构最好和路由一致,这样的话形成一一对应关系,就非常好维护了。

nodemon自动重启服务

相信大家每次改完代码都要重启服务,是不是感觉很难受,有没有自动重启呢?答案是有的,小生这就为您呈上来

安装nodemon

npm install -g nodemon

添加脚本

package.json的scripts中添加一行脚本:

"dev": "nodemon ./app.js",

使用nodemon

npm run dev

修改一下app.js中的代码,保存,就会看到nodemon自动帮我们重启应用了。

调试

解决了自动运行之后,我们来说一下调试。其实nodejs自带了调试的,只需要一个inspect参数,调试的时候就跟我们在chrome中调试是一模一样的。 我们先去package.json的scripts中添加一行脚本:

"debug": "nodemon --inspect ./app.js",

然后我们运行

npm run debug

刷新我们的网页,此时我们能看到开发者工具上面多了一个nodejs的图标:

点击这个图标,就可以跟调试网页一样调试nodejs代码了:

跨域

为了防止跨域问题,我们需要使用koa2-cors类库,使用方式很简单

npm install koa2-cors --save

在入口文件app.js中配置使用

const cors = require('koa2-cors')
app.use(cors())

一行代码搞定,cors的具体配置此处就不细说了,有兴趣的可以自己去看看koa2-cors

好了,本节课程除了路由设计以外都是一些开发中的小技巧。周末了,小伙伴们冲起来啊。。。

创建了一个qq群695712519,有兴趣的可以添加一下,有免费的科学上网方法哦。。。

个人格言: 花堪折时直须折 莫待无花空折枝。生死看淡,不服就干...