koa-router
在hello-koa工程中赢笨,我們處理http請(qǐng)求一律返回相同的HTML厢岂,這樣雖然非常簡(jiǎn)單煌寇,但是用瀏覽器一測(cè),隨便輸入任何URL都會(huì)返回相同網(wǎng)頁(yè)淑翼。
正常情況下腐巢,我們應(yīng)該對(duì)不同的URL調(diào)用不同的處理函數(shù),這樣才能返回不同的結(jié)果玄括。例如像這樣寫:
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();
}
});
這么寫是可以運(yùn)行的冯丙,但是好像有點(diǎn)蠢。
應(yīng)該有一個(gè)能集中處理URL的middleware遭京,它根據(jù)不同的URL調(diào)用不同的處理函數(shù)胃惜,這樣泞莉,我們才能專心為每個(gè)URL編寫處理函數(shù)。
==koa-router==
為了處理URL船殉,我們需要引入koa-router這個(gè)middleware鲫趁,讓它負(fù)責(zé)處理URL映射。
我們把上一節(jié)的hello-koa工程復(fù)制一份捺弦,重命名為url-koa饮寞。
先在package.json中添加依賴項(xiàng):
"koa-router": "7.0.0"
//然后用npm install安裝孝扛。
接下來(lái)列吼,我們修改app.js,使用koa-router來(lái)處理URL:
const Koa = require('koa');
// 注意require('koa-router')返回的是函數(shù):
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 = `<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...');
注意導(dǎo)入koa-router的語(yǔ)句最后的()是函數(shù)調(diào)用:
const router = require('koa-router')();
相當(dāng)于:
const fn_router = require('koa-router');
const router = fn_router();