koa 路由配置

Koa 路由

路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET、POST 等) 组成的,涉及到应用如何响应客户端对某个网站节点的访问。

通俗的讲:路由就是根据不同的 URL 地址,加载不同的页面实现不同的功能。

Koa 中的路由和 Express 有所不同,在 Express 中直接引入 Express 就可以配置路由,但是在 Koa 中我们需要安装对应的 koa-router 路由模块来实现

npm install koa-router

创建app.js文件

const koa = require('koa')
const router = require('koa-router')() // 引入和实例化路由

const app = new koa() // 创建koa实列

// 配置路由
//ctx 上下文(content),包含了request和response信息
router.get('/', async (ctx, next) => {
  ctx.body="Hello koa";
})

router.get('/news', async (ctx, next) => {
  ctx.body="新闻 page"
});
app.use(router.routes()); //作用:启动路由

// 作用: 这是官方文档的推荐用法,我们可以 看到 router.allowedMethods()用在了路由匹配 router.routes()之后
// 所以在当所有 路由中间件最后调用.此时根据 ctx.status 设置 response 响应头
app.use(router.allowedMethods()); // 可以不配置这个,建议配置上

app.listen(3000,()=>{
  console.log('starting at port 3000');
})

 

 

Koa 路由 get 传值

在 koa2 中 GET 传值通过 request 接收,但是接收的方法有两种:query 和 querystring。

query:返回的是格式化好的参数对象,querystring:返回的是请求字符串。

const koa = require('koa')
const router = require('koa-router')() // 引入和实例化路由

const app = new koa() // 创建koa实列

// 配置路由
//ctx 上下文(content),包含了request和response信息
router.get('/', async (ctx, next) => {
  ctx.body="Hello koa";
})

router.get('/news', async (ctx, next) => {
  let url =ctx.url;
  //从 request 中获取 GET 请求
  let request =ctx.request;
  let req_query = request.query;
  let req_querystring = request.querystring;
  //从上下文中直接获取
  let ctx_query = ctx.query;
  let ctx_querystring = ctx.querystring;

  ctx.body={
    url,
    req_query,
    req_querystring,
    ctx_query,
    ctx_querystring
  }

});
app.use(router.routes()); //作用:启动路由

// 作用: 这是官方文档的推荐用法,我们可以 看到 router.allowedMethods()用在了路由匹配 router.routes()之后
// 所以在当所有 路由中间件最后调用.此时根据 ctx.status 设置 response 响应头
app.use(router.allowedMethods()); // 可以不配置这个,建议配置上

app.listen(3000,()=>{
  console.log('starting at port 3000');
})

 

 

 

Koa 动态路由

const koa = require('koa')
const router = require('koa-router')() // 引入和实例化路由

const app = new koa() // 创建koa实列

// 配置路由
//ctx 上下文(content),包含了request和response信息
router.get('/', async (ctx, next) => {
  ctx.body="Hello koa";
})

router.get('/news/:aid', async (ctx, next) => {
  console.log(ctx.params); // { aid: '123' } //获取动态路由的数据
  ctx.body='这是新闻页面'
});
app.use(router.routes()); //作用:启动路由

// 作用: 这是官方文档的推荐用法,我们可以 看到 router.allowedMethods()用在了路由匹配 router.routes()之后
// 所以在当所有 路由中间件最后调用.此时根据 ctx.status 设置 response 响应头
app.use(router.allowedMethods()); // 可以不配置这个,建议配置上

app.listen(3000,()=>{
  console.log('starting at port 3000');
})

可以多个值

const koa = require('koa')
const router = require('koa-router')() // 引入和实例化路由

const app = new koa() // 创建koa实列

// 配置路由
//ctx 上下文(content),包含了request和response信息
router.get('/', async (ctx, next) => {
  ctx.body="Hello koa";
})

router.get('/news/:aid/:cid', async (ctx, next) => {
  console.log(ctx.params); // { aid: '123' } //获取动态路由的数据
  ctx.body='这是新闻页面'
});
app.use(router.routes()); //作用:启动路由

// 作用: 这是官方文档的推荐用法,我们可以 看到 router.allowedMethods()用在了路由匹配 router.routes()之后
// 所以在当所有 路由中间件最后调用.此时根据 ctx.status 设置 response 响应头
app.use(router.allowedMethods()); // 可以不配置这个,建议配置上

app.listen(3000,()=>{
  console.log('starting at port 3000');
})

 

如果匹配不到对应的动态路由那么就会not found

 

 

 

 

路由的模块化

 

posted @ 2019-04-22 15:11  胡椒粉hjf  阅读(679)  评论(0编辑  收藏  举报