9-廖雪峰-node-web-koa 2-url

2056 ワード

koa-router
hello-koaプロジェクトでは、httpリクエストを処理して一律に同じHTMLを返すのは簡単ですが、ブラウザで測ると、任意のURLを入力しても同じページに戻ります.
通常、異なる結果を返すには、異なるURLに対して異なる処理関数を呼び出す必要があります.たとえば、次のように書きます.
app.use(async (ctx, next) => {
    if (ctx.request.path === '/') {
        ctx.response.body = 'index page';
    } else {
        await next();
    }
});

app.use(async (ctx, next) => {
    if (ctx.request.path === '/test') {
        ctx.response.body = 'TEST page';
    } else {
        await next();
    }
});

app.use(async (ctx, next) => {
    if (ctx.request.path === '/error') {
        ctx.response.body = 'ERROR page';
    } else {
        await next();
    }
});

このように書くと運行できますが、少し愚かなようです.
異なるURLに基づいて異なる処理関数を呼び出すURLを集中的に処理できるmiddlewareがあるはずです.そうすれば、各URLの処理関数の作成に専念することができます.
==koa-router==
URLを処理するには、URLマッピングの処理を担当するkoa-routerというmiddlewareを導入する必要があります.
前節のhello-koaプロジェクトをコピーしurl-koaと名前を変更しました.
まずpackage.jsonに依存項目を追加するには:
"koa-router": "7.0.0"
//   npm install  。

次にappを修正します.jsは、koa-routerを使用してURLを処理します.
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;
    ctx.response.body = `

Hello, ${name}!

`; }); router.get('/', async (ctx, next) => { ctx.response.body = '

Index

'; }); // add router middleware: app.use(router.routes()); app.listen(3000); console.log('app started at port 3000...');

注意koa-routerをインポートした文の最後の()は関数呼び出しです.
const router = require('koa-router')();
   :

const fn_router = require('koa-router');
const router = fn_router();