上一篇文章主要介绍了koa2的基本操作(坐下坐下),但是每次都返回一样的HTML似乎也不可能,所以现在我们需要来处理URL了。
直接来点高级点的东西,我们需要一个能处理URL的middleware,它叫做:koa-router:
npm install koa-router
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
const Koa =
require(
'koa');
const router =
require(
'koa-router')();
const app = Koa();
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 Page</h1>';
});
app.use(router.routes());
app.listen(
3000);
console.log(
'Server listen on port 3000...');
|
这里的代码,会在访问网址localhost:3000时返回Index Page,而在访问localhost:3000/hello/louis的时候,显示的就是Hello, louis!了,这样router就为我们达到了处理URL的功能。注意一下,在引入router的时候,是多一个括号的,这说明我们引入的router是一个对象,而前面Koa引入的其实是一个类(所以它被大写了~)。
处理POST请求
router.get()处理的是HTTP的GET请求,但是除了GET请求,我们还经常会碰到POST请求(比如在注册一个用户啊,或者新增一篇推文的时候),这就需要用到router.post()的方法。不过,post请求的内容,通常作为request的body进行发送,而Node.js和koa都不具备解析这个body的功能,所以,这里我们就要用到另一个非常有用的middleware: koa-bodyparser。
大专栏
Node.js Web开发(二)pt">
1
2
3
4
5
6
7
|
const bodyParser =
require(
'koa-bodyparser');
app.use(bodyParser());
app.use(router.routes());
...
|
现在,我们就可以处理POST的请求了!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
router.get(
'/',
async (ctx, next) => {
ctx.response.body =
`<h1>Index Page</h1>
<form action="/signin" method="post">
<p>Name: <input name="name" value="snow"></p>
<p>Password: <input type="password" name="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(
`login with name: {$name} and password: {$password}...`);
if (name ===
'snow' && password ===
'117'){
ctx.response.body =
`<h1>Welcome, {$name}!</h1>`;
}
else {
ctx.response.body =
`<h1>Login failed.</h1>
<p><a href="/">Try again</a></p>`;
}
});
|
注意这里的name和password的写法,如果不存在的话,默认为 ‘’,也不会报错的。