Koa2路由及koa脚手架使用入门详解

 更新时间:2023年05月24日 11:03:42   作者:前端老兵  
这篇文章主要为大家介绍了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脚手架,请参考:

浅谈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脚手架的资料请关注脚本之家其它相关文章!

相关文章

  • Node.js五大应用性能技巧小结(必须收藏)

    Node.js五大应用性能技巧小结(必须收藏)

    本篇文章主要介绍了Node.js五大应用性能技巧小结(必须收藏),小编觉得挺不错的,现在分享给大家
    2017-08-08
  • Node.js和Vue的安装与配置超详细步骤(推荐)

    Node.js和Vue的安装与配置超详细步骤(推荐)

    使用VUE前端框架开发,需要安装Node.js和Vue.js,这篇文章主要给大家介绍了关于Node.js和Vue的安装与配置超详细步骤的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 在Node.js中判定文件是否可执行的方法详解

    在Node.js中判定文件是否可执行的方法详解

    在进行前端开发时,经常需要处理各种文件权限的问题,特别是在Node.js环境中,你可能想要判断某个文件是否具有可执行权限,本文将详细介绍如何使用isexe模块来进行这一操作,需要的朋友可以参考下
    2024-05-05
  • node.js中 redis 的安装和基本操作示例

    node.js中 redis 的安装和基本操作示例

    这篇文章主要介绍了node.js中 redis 的安装和基本操作,结合实例形式分析了node.js中Redis下载、安装、数据类型及基本操作技巧,需要的朋友可以参考下
    2020-02-02
  • node.js降低版本的方式详解(解决sass和node.js冲突问题)

    node.js降低版本的方式详解(解决sass和node.js冲突问题)

    这篇文章主要介绍了node.js降低版本的方式(解决sass和node.js冲突),本文是因为sass版本和node版本不匹配(可以找一下对应的版本),本文给大家详细讲解,需要的朋友可以参考下
    2023-02-02
  • 详解nodeJS之路径PATH模块

    详解nodeJS之路径PATH模块

    本篇文章主要介绍了详解nodeJS之路径PATH模块 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • NodeJs版本过高无法启动Vue项目报错的几种解决方法

    NodeJs版本过高无法启动Vue项目报错的几种解决方法

    在开发vue项目时,我们通常使用nodejs作为项目的运行环境,但是有时候,由于nodejs版本过高,可能会导致vue项目启动报错,这篇文章主要给大家介绍了关于NodeJs版本过高无法启动Vue项目报错的几种解决方法,需要的朋友可以参考下
    2023-12-12
  • Linux下为Node.js程序配置MySQL或Oracle数据库的方法

    Linux下为Node.js程序配置MySQL或Oracle数据库的方法

    这篇文章主要介绍了Linux下为Node.js程序配置MySQL或Oracle数据库的方法,这里默认已经装配好了Node环境然后我们利用npm包管理工具来进行配置,需要的朋友可以参考下
    2016-03-03
  • node puppeteer爬虫爬取电影网站及生成pdf文档示例

    node puppeteer爬虫爬取电影网站及生成pdf文档示例

    这篇文章主要介绍了node puppeteer爬虫爬取电影网站及生成pdf文档使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Nodejs进程管理模块forever详解

    Nodejs进程管理模块forever详解

    服务器管理是系统上线后,必须要面对的问题。最好有一个软件可以提供整套的服务器运行解决方案:要求运行稳定,支持高并发,启动/停止命令简单,支持热部署,宕机重启,监控界面和日志,集群环境。
    2014-06-06

最新评论