数据解析

GET
GET数据的处理:GET一般都是请求页面,不过也可以传传form表单,一起看看
html代码

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Page Title</title>
</head>
<body>
    <form action="http://localhost:7000" method="GET">
        用户名: <input type="text" name="username"><br>
        密码:<input type="password" name="userpassword"><br>
        <button>提交</button>
    </form>
</body>
</html>

上传的数据在ctx.query对象中:ctx.query

const Koa = require("koa");
let server = new Koa();
server.listen(7000);

server.use(async ctx=> {
    console.log(ctx.query);
    ctx.body="上传成功";
})

在这里插入图片描述

POST
处理纯文字的POST数据:比如用户名 密码等
先安装一个中间件 这个koa-better-body可以接文字类 也可以接图片 视频 也可以接JSON等

 npm install koa-better-body -D

在这里插入图片描述
中间件中使用了generators,需要转换为async:

npm i koa-convert -D
const Koa = require("koa");
const body = require('koa-better-body');
const convert = require('koa-convert');
let server = new Koa();
server.listen(7000);

server.use(convert(body()))  // 使用转换成async的中间件
// 因为要使用body,所以要在上面解析
server.use(async ctx=> {
    if(ctx.url=="/favicon.ico") return;
    console.log(ctx.request.fields);
    // POST的数据在ctx.request.fields中
})

报错消失并得到结果:
在这里插入图片描述

处理文件型的POST数据:比如图片 视频等
html代码:

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Page Title</title>
</head>
<body>
    <form action="http://localhost:7000" method="POST" enctype="multipart/form-data">
    <!--包含文件要指定enctype="multipart/form-data"-->
        用户名: <input type="text" name="username"><br>
        密码:<input type="password" name="userpassword"><br>
        文件:<input type="file" name="f1"><br>
        <button>提交</button>
    </form>
</body>
</html>

在koa-better-body中可以写对象,里面的uploadDir指定上传过来的目录;
这个目录要使用绝对路径,一方面是为了防止出错,另一方面是为了以后好迁移;
原生模块path可以把相对路径解析成绝对路径,path.resolve中可以使用魔法变量_dirname,具体看代码

const Koa = require("koa");
const body = require('koa-better-body');
const convert = require('koa-convert');
const path = require('path');   // 原生模块 负责把相对路径解析成绝对路径

let server = new Koa();
server.listen(7000);

server.use(convert(body({
    uploadDir: path.resolve(__dirname, './upload')   // 指定服务器上的目录
})))  // 使用转换成async的中间件

server.use(async ctx=> {
    if(ctx.url=="/favicon.ico") return;
    console.log(ctx.request.fields);
    // POST的数据在ctx.request.fields中
})

上传后的信息,表示已经成功了。
在这里插入图片描述
并且upload中也有对应的文件,但是没有扩展名,这是因为服务器不需要看文件,需要可以收到加,或者下载的时候拼接。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值