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