Koa2路由及koa脚手架使用入门详解
作者:前端老兵
路由是什么
路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。
路由是 根据不同的 url 地址 展示 不同的内容或页面。
比如你请求了某个网站的用户列表的URL他就会去执行查询用户列表,并返回用户列表数据。
如果你请求了特定用户的接口的URL,他就会查询特定用户,并返回给你特定用户的数据。
路由决定了不同URL是如何被不同地执行的
在Koa中,路由的本质是中间件
为什么要用路由?
- 如果没有路由,会怎么样?
- 路由存在的意义是什么?
如果没有路由
- 所有请求都做了相同的事
- 所有请求都会返回相同的结果
路由存在的意义
- 处理不同的URL
- 处理不同的HTTP方法
- 解析URL上的参数
koa中使用路由
自定义项目中使用koa路由
安装
npm install koa-router
新建服务器
const koa = require('koa');// 引入koa const Router = require('koa-router'); //配置路由 ,ctx 上下文context ,包含了request和response等信息 var router = new Router(); router.get('/',async (ctx)=>{ ctx.body = '首页'; //相当于 res.writeHead(); res.end(); }).get('/news',async (ctx)=>{ ctx.body = '这是一个新闻页面'; }); const app = new koa();//实例化koa app.use(router.routes()); //启动路由 app.use(router.allowedMethods());//官方配置
获取get
传值
const koa = require('koa'); var router = require('koa-router')(); var app = new koa(); router.get('/',async (ctx)=>{ ctx.body = '首页'; }); router.get('/news',async (ctx)=>{ ctx.body = '新闻列表页面'; }); //获取get传值 router.get('/newscontent',async(ctx)=>{ //从ctx中读取get值 console.log(ctx.query); //获取的是格式化的对象,例{id:'123'} console.log(ctx.querystring); //获取的是url的字符串 ,例:'id=123' console.log(ctx.request); //获取请求相关的信息,包括method,url,header等信息 ctx.body = '新闻详情'; }); //动态路由 router.get('/news/:params',async(ctx)=>{ //aid 为自定义参数名,可以通过ctx.params访问 //如果有多个动态传值,则可以写成 '/news/:params1/:params2'的形式 ctx.body = ctx.params; }); app.use(router.routes()); //启动路由 app.use(router.allowedMethods()); //官方配置,请求错误的时候返回一个状态 app.listen(3000);
使用 koa 脚手架(koa-generator)创建项目中使用koa路由
如果您使用 koa 脚手架(koa-generator)已经创建好了项目你,那么使用路由会非常简单。
如果不清楚如何使用koa脚手架,请参考:
koa2项目目录详解:
. +-- bin | +-- www // 项目启动必备文件,配置端口等服务信息 +-- node_modules // 项目依赖,安装的所有模块都会在这个文件夹下 +-- public // 存放静态文件,如样式、图片等 | +-- images // 图片 | +-- javascript // js文件 | +-- stylesheets // 样式文件 +-- routers // 存放路由文件,如果前后端分离的话只用来书写api接口使用 | +-- index.js | +-- user.js +-- views // 存放存放模板文件,就是前端页面,如果后台只是提供api的话,这个就是备用 | +-- error.pug | +-- index.pug | +-- layout.pug +-- app.js // 主入口文件 +-- package.json // 存储项目名、描述、作者、依赖等等信息 +-- package-lock.json // 存储项目依赖的版本信息,确保项目内的每个人安装的版本一致
打开 routes\index.js
,j即可查看创建好的路由文件。
var router = require('koa-router')(); // 引入路由插件 // 定义路由内容 我们只需要操作这里即可 router.get('/', function *(next) { yield this.render('index', { title: 'Hello World Koa!' }); }); router.get('/foo', function *(next) { yield this.render('index', { title: 'Hello World foo!' }); }); router.post('/post1', function *(next) { yield this.render('index', { title: 'Hello World foo!' }); }); //获取get传值 router.get('/newscontent',async(ctx)=>{ //从ctx中读取get值 console.log(ctx.query); //获取的是格式化的对象,例{id:'123'} console.log(ctx.querystring); //获取的是url的字符串 ,例:'id=123' console.log(ctx.request); //获取请求相关的信息,包括method,url,header等信息 ctx.body = '新闻详情'; }); //动态路由 router.get('/news/:params',async(ctx)=>{ //aid 为自定义参数名,可以通过ctx.params访问 //如果有多个动态传值,则可以写成 '/news/:params1/:params2'的形式 ctx.body = ctx.params; }); module.exports = router; // 导出路由
app.js中路由展示
注意:这里,只展示有关路由代码,还有其他代码,省略了不少:
var app = require('koa')(); ... var index = require('./routes/index'); var users = require('./routes/users'); // 自定义的路由模块 : 用户模块 users ... // routes definition app.use(index.routes(), index.allowedMethods()); //启动路由 app.use(users.routes(), users.allowedMethods()); //官方配置,请求错误的时候返回一个状态 ... module.exports = app;
users.js
var router = require('koa-router')(); // 引入路由插件 router.prefix('/users'); // 定义路由前缀 // 定义路由内容 我们只需要操作这里即可 router.get('/', function *(next) { this.body = 'this is a users response!'; }); router.get('/bar', function *(next) { this.body = 'this is a users/bar response!'; }); module.exports = router; // 导出路由
总结
路由处理不同的URL
我们要做什么事情,根据路由来决定。我们通过路由就找到了这个地方,去做相应的业务逻辑的处理好。
就是处理不同的HTTP方法
因为我们在请求一个地方的时候,可能你这个请求方式会有很多种,比如get请求、post 请求。每一种请求的方法,它的所代表的意义又不一样。所以我们为了区分不同的请求方法,我们也得去使用路由。
为了解析URL上面的参数
我们在去做前后端分离开发,需要通过http请求,并且请求一个地址,把我们要请求的参数传给服务器端。
服务器端根据我们传的参数来决定返回什么样的结果。
以上三点就说明了路由存在的意义,所以我们在项目开发的过程中,一定要去区分好路由,以及对路由要有一个合理的规划。
推荐使用 koa 脚手架(koa-generator
)创建项目。,自己创建项目的话,需要安装很多包,很繁琐,一不小心,就会出问题。
参考文档 https://koa.bootcss.com/index.html
以上就是Koa2路由及koa脚手架使用入门详解的详细内容,更多关于Koa2路由koa脚手架的资料请关注脚本之家其它相关文章!