koa-router处理URL
2017-07-16 本文已影响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());
之前
-