koa-router处理URL

作者: 大盗老袁 | 来源:发表于2017-07-16 09:19 被阅读901次

koa-router处理URL

  • koa-router使用的结构

    const Koa = require('koa');
    
    // 注意require('koa-router')返回的是函数:
    const router = require('koa-router')();
    
    const app = new Koa();
    
    // log request URL:
    app.use(async (ctx, next) => {
        console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
        await next();
    });
    
    // add url-route:
    router.get('/hello/:name', async (ctx, next) => {
        var name = ctx.params.name;   //name是一个变量,通过ctx.params.name访问
        ctx.response.body = `<h1>Hello, ${name}!</h1>`;
    });
    
    router.get('/', async (ctx, next) => {
        ctx.response.body = '<h1>Index</h1>';
    });
    
    // add router middleware:
    app.use(router.routes());
    
    app.listen(3000);
    console.log('app started at port 3000...');
    
    • const router = require('koa-router')(); 对象生成,因为require('koa-router')返回的是函数,后面再加个 () 才得到对象
    • router.get('/path',async fn) 工作逻辑(处理get请求),添加对应url的处理函数
    • app.use(router.routes()); 添加router middleware, router.routes() 返回的就是middleware
  • 使用koa-bodyparser解析request的body以处理post请求

    • const bodyParser = require('koa-bodyparser'); 引入koa-bodyparser

    • router.get('/', async (ctx, next) => {
          ctx.response.body = `<h1>Index</h1>
              <form action="/signin" method="post">
                  <p>Name: <input name="name" value="koa"></p>
                  <p>Password: <input name="password" type="password"></p>
                  <p><input type="submit" value="Submit"></p>
              </form>`;
      });
      
      router.post('/signin', async (ctx, next) => {
          var
              name = ctx.request.body.name || '',
              password = ctx.request.body.password || '';
          console.log(`signin with name: ${name}, password: ${password}`);
          if (name === 'koa' && password === '12345') {
              ctx.response.body = `<h1>Welcome, ${name}!</h1>`;
          } else {
              ctx.response.body = `<h1>Login failed!</h1>
              <p><a href="/">Try again</a></p>`;
          }
      });
      

      对于post请求的body解析结果存储再ctx.request.body

    • app.use(bodyParser()); 必须添加在app.use(router.routes()); 之前

摘自处理URL(廖雪峰)

url-koa源码

url2-koa源码(重构)

相关文章

网友评论

    本文标题:koa-router处理URL

    本文链接:https://www.haomeiwen.com/subject/ikrtkxtx.html