都不提供解析request的body的功能! 所以
为了措置惩罚惩罚URL,我们需要引入koa-router这个middleware,让它卖力措置惩罚惩罚URL映射。
我们改削app.js,使用koa-router来措置惩罚惩罚URL:
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; 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...‘);
注意导入koa-router的语句最后的()是函数挪用
const router = require(‘koa-router‘)(); // 相当于: const fn_router = require(‘koa-router‘); const router = fn_router();
二、措置惩罚惩罚post请求
用router.get(‘/path‘, async fn)措置惩罚惩罚的是get请求。如果要措置惩罚惩罚post请求,可以用router.post(‘/path‘, async fn)。
用post请求措置惩罚惩罚URL时,我们会遇到一个问题:post请求凡是会发送一个表单,或者JSON,它作为request的body发送,但无论是Node.js供给的原始request东西,还是koa供给的request东西,都不供给解析request的body的成果!
所以,我们又需要引入另一个middleware来解析原始request请求,然后,把解析后的参数,绑定到ctx.request.body中。
koa-bodyparser就是用来干这个活的。使用npm install安置。
接下来,改削app.js,引入koa-bodyparser:
const bodyParser = require(‘koa-bodyparser‘);
在合适的位置加上
app.use(bodyParser());
由于middleware的挨次很重要,这个koa-bodyparser必需在router之前被注册到app东西上。
三、重构
所有的URL措置惩罚惩罚函数都放到app.js里显得很乱,而且,每加一个URL,就需要改削app.js。跟着URL越来越多,app.js就会越来越长。
如果能把URL措置惩罚惩罚函数集中到某个js文件,或者某几个js文件中就好了,然后让app.js自动导入所有措置惩罚惩罚URL的函数。这样,代码一疏散,逻辑就显得清楚了。最好是这样:
url2-koa/ +- controllers/ | | | +- login.js <-- 措置惩罚惩罚login相关URL | | | +- users.js <-- 措置惩罚惩罚用户打点相关URL | +- app.js <-- 使用koa的js | +- package.json <-- 项目描述文件 | +- node_modules/ <-- npm安置的所有依赖包
我们先在controllers目录下编写index.js
var fn_index = async (ctx, next) => { ctx.response.body = `<h1>Index</h1> <form action=http://www.mamicode.com/"/signin" method=http://www.mamicode.com/"post"> <p>Name: <input name=http://www.mamicode.com/"name" value=http://www.mamicode.com/"koa"></p> <p>Password: <input name=http://www.mamicode.com/"password" type=http://www.mamicode.com/"password"></p> <p><input type=http://www.mamicode.com/"submit" value=http://www.mamicode.com/"Submit"></p> </form>`; }; var fn_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=http://www.mamicode.com/"/">Try again</a></p>`; } }; module.exports =http://www.mamicode.com/ { ‘GET /‘: fn_index, ‘POST /signin‘: fn_signin };
这个index.js通过module.exports把两个URL措置惩罚惩罚函数袒露出来。类似的,hello.js把一个URL措置惩罚惩罚函数袒露出来:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32619.html
- 上一篇:php 加解密函数
- 下一篇: 7、jsp在xml中设置映射后