Node.js Web开发(二)

上一篇文章主要介绍了koa2的基本操作(坐下坐下),但是每次都返回一样的HTML似乎也不可能,所以现在我们需要来处理URL了。

直接来点高级点的东西,我们需要一个能处理URL的middleware,它叫做:koa-router:

npm install koa-router

1234567891011121314151617181920
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">
1234567
const bodyParser = require(‘koa-bodyparser‘);app.use(bodyParser());app.use(router.routes());...

现在,我们就可以处理POST的请求了!

123456789101112131415161718192021
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的写法,如果不存在的话,默认为 ‘’,也不会报错的。