威联通怎么建设网站,企业文化墙创意设计图,低价网站建设方案,专业团队p图准备工作
安装依赖
npm init -y
npm i koakoa 文档#xff1a;https://koajs.cn/#
koa 中不能用回调的方式来实现#xff0c;因为 async 函数执行的时候不会等待回调完成
app.use(async (ctx, next) {console.log(ctx.path, ctx.method);if (ctx.path /login…准备工作
安装依赖
npm init -y
npm i koakoa 文档https://koajs.cn/#
koa 中不能用回调的方式来实现因为 async 函数执行的时候不会等待回调完成
app.use(async (ctx, next) {console.log(ctx.path, ctx.method);if (ctx.path /login ctx.method POST) {const arr [];ctx.req.on(data, function (chunk) {arr.push(chunk);});ctx.req.on(end, function () {const result Buffer.concat(arr).toString();console.log(result----, result);ctx.body result;});} else {next();}
});koa 中所有的异步都必须是 promise只有 promise 才有等待效果必须所有的 next 方法前需要有 await、return 否则没有等待效果
app.use(async (ctx, next) {console.log(ctx.path, ctx.method);if (ctx.path /login ctx.method POST) {await new Promise((resolve, reject) {const arr [];ctx.req.on(data, function (chunk) {arr.push(chunk);});ctx.req.on(end, function () {const result Buffer.concat(arr).toString();console.log(result----, result);ctx.body result;resolve();});});} else {await next();}
});实现一个表单提交功能 server.js
const Koa require(koa);const app new Koa();app.use((ctx, next) {// 路径是 /login get 方式// ctx 包含了 request response req resconsole.log(ctx.path, ctx.method);if (ctx.path /login ctx.method GET) {ctx.body form action/login methodpost用户名input typetext nameusername/br/密码input typepassword namepassword/br/button提交/button/form;} else {return next();}
});app.use(async (ctx, next) {console.log(ctx.path, ctx.method);if (ctx.path /login ctx.method POST) {await new Promise((resolve, reject) {const arr [];ctx.req.on(data, function (chunk) {arr.push(chunk);});ctx.req.on(end, function () {const result Buffer.concat(arr).toString();console.log(result----, result);ctx.body result;resolve();});});} else {await next();}
});app.on(error, function (err) {console.log(error-----, err);
});app.listen(3000);启动服务访问 http://localhost:3000/login
nodemon server.js输入账号密码点击提交 koa-bodyparser
下面使用 koa-bodyparser 简化逻辑安装 koa-bodyparserhttps://www.npmjs.com/package/koa-bodyparser
npm i koa-bodyparser用法
const Koa require(koa);
const bodyParser require(koa-bodyparser);const app new Koa();
app.use(bodyParser());app.use(async ctx {// the parsed body will store in ctx.request.body// if nothing was parsed, body will be an empty object {}ctx.body ctx.request.body;
});业务里添加逻辑
const Koa require(koa);
const bodyParser require(koa-bodyparser);
const app new Koa();
app.use(bodyParser());app.use((ctx, next) {// 路径是 /login get 方式// ctx 包含了 request response req resconsole.log(ctx.path, ctx.method);if (ctx.path /login ctx.method GET) {ctx.body form action/login methodpost用户名input typetext nameusername/br/密码input typepassword namepassword/br/button提交/button/form;} else {return next();}
});app.use(async (ctx, next) {console.log(ctx.path, ctx.method);if (ctx.path /login ctx.method POST) {ctx.body ctx.request.body;} else {await next();}
});app.on(error, function (err) {console.log(error-----, err);
});app.listen(3000);效果也是一样的
下面自己实现 koa-bodyparser
const querystring require(querystring);
console.log(使用的是 kaimo-koa-bodyparser 中间件);
// 中间件的功能可以扩展属性、方法
module.exports function () {return async (ctx, next) {await new Promise((resolve, reject) {const arr [];ctx.req.on(data, function (chunk) {arr.push(chunk);});ctx.req.on(end, function () {if (ctx.get(content-type) application/x-www-form-urlencoded) {const result Buffer.concat(arr).toString();console.log(kaimo-koa-bodyparser-result----, result);ctx.request.body querystring.parse(result);}resolve();});});await next(); // 完成后需要继续向下执行};
};将业务代码的引用自己实现的
// 使用自己实现的 koa-bodyparser
const bodyParser require(./kaimo-koa-bodyparser);启动服务效果一样