在上一篇文章中搭建了简单的http服务器并且成功在3000端口上运行成功,也编写了第一个路由。
路由的拆分
在一个成熟的项目中,我们不会把路由写在入口文件里面的,不利于以后的维护和管理。
在router文件夹里面新建一个index.js
开始编写我们的路由
const Router = require('koa-router')
const router = new Router()
router.get('/', ctx => {
ctx.body = 'hello world'
})
//导出路由
module.exports = router
在入口文件中引入路由
const Koa = require('koa')
const app = new Koa() //实例化Koa
const body = require('koa-bodyparser')
const Router = require('koa-router')
const router = new Router() //实例化路由中间件
//引入路由
const IndexRouter = require('./routes/index.js')
//使用 koa-bodyparser中间
app.use(body())
app.use(IndexRouter.routes()).use(IndexRouter.allowedMethods())
//启动http服务 并在3000端口上运行
app.listen(3000, () => {
console.log('service is running on port 3000')
})
接收GET参数
koa提供了ctx上下文对象,request和response都在ctx对象中
router.get('/a1', ctx => {
const query = ctx.request.query
ctx.body = query
})
ctx.request.query就是用来介绍get中的url参数的ctx.request.query也可以写成ctx.query
例如url是==http://127.0.0.1:3000/a1?id=123==那些query就是一个对象
{id:123}
router.get('/a1/:id', ctx => {
const query = ctx.request.query
ctx.body = query
})
GET动态路由中接收参数
router.get('/a1/:id', ctx => {
const query = ctx.params
ctx.body = query
})
:id就是动态路由的参数名字ctx.request.params也可以写成ctx.params就是接收到的参数
例如url是==http://127.0.0.1:3000/a1/123==那些query就是一个对象
{id:123}
接收POST参数
router.post('/a1', ctx => {
ctx.body = ctx.request.body
})
ctx.request.body就是前端传过来的数据体
自动加载路由
我们只把routers文件夹里面的index.js作为整个路由的出口文件,不要每加一个路由文件就在app.js里面引入一次
routers/index.js
const fs = require("fs");
module.exports = app => {
fs.readdirSync(__dirname).forEach(file => {
if (file === "index.js" || /^\./.test(file)) {
return;
}
const route = require(`./${file}`);
app.use(route.routes()).use(route.allowedMethods());
});
};
app.js
const Koa = require('koa')
const app = new Koa() //实例化Koa
const body = require('koa-bodyparser')
//引入路由
const routes = require('./routes/index.js')
//使用 koa-bodyparser中间
app.use(body())
//执行routes方法 把app传进去
routes(app);
//启动http服务 并在3000端口上运行
app.listen(3000, () => {
console.log('service is running on port 3000')
})
我们具体拆分一下我们的工程,我们只想router只负责路由的功能,不负责处理逻辑,我们把逻辑的处理放进controller文件里面去
控制器
在routes文件里新建一个user.js文件处理我们关于用户操作的路由
routers/user.js
const router = require('koa-router')()
//给当前路由统一增加前缀
router.prefix('/v1/users')
//引入控制器里面的方法
const { login, update, create, getUserInfo } = require('../controller/user')
//用户登录路由
router.post('/login', login)
//增加一个user
router.post('/', create)
//修改user
router.patch('/:id', update)
//获取user信息
router.get('/:id', getUserInfo)
module.exports = router
在controller文件夹里面见一个和路由对应的js文件,user.js,开始编写上面路由文件中对用的方法
controller/user.js
//关于登录逻辑的处理
function login(ctx) {
ctx.body = 'login'
}
//增加用户的逻辑处理
function create(ctx) {
ctx.body = 'create'
}
//修改用户的处理
function update(ctx) {
ctx.body = 'update'
}
//获取用户信息的处理
function getUserInfo(ctx) {
ctx.body = 'getUserInfo'
}
module.exports = {
login,
create,
update,
getUserInfo,
}
交个朋友吧~~
