选项:
常用 | 作用 | 选项 |
---|---|---|
改名 | fields、files | |
是 | 禁用 | multipart 、buffer |
是 | 限制 | maxFleldsSize-20MB、maxFileSize-200MB maxFields-1000 |
json | jsonStrict-true、detectJSON | |
自定义类型 | extendTypes、handler |
改名:
改名很少使用,除非名字冲突,简单代码:
const Koa = require("koa");
const body = require("koa-better-body");
const convert = require("koa-convert");
let server = new Koa();
server.listen(8000);
server.use(convert(
body({
// 更名
fields: 'aaa',
files: 'bbb'
})
))
server.use(async ctx=>{
// 使用新名字
ctx.request.aaa
ctx.request.bbb
});
禁止文件上传:
用于接口禁止上传文件,默认为true,是允许的,但是为了一些接口(比如所搜框)防止恶意上传,所以需要禁止。
server.use(convert(
body({
// 禁止上传文件
multipart: 'false',
buffer: 'false'
})
))
限制上传大小:
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(8000);
server.use(convert(
body({
uploadDir: path.resolve(__dirname, 'upload'),
maxFileSize: 100*1024
})
))
server.use(async ctx=>{
console.log(ctx.request.fields);
ctx.body = '上传成功'
});
简单的提示:
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(8000);
server.use(async (ctx, next)=> {
try {
await next();
// 在这里使用next() 在catch中捕获
} catch (error) {
console.log("文件过大");
ctx.body = "文件过大";
}
})
// 限制文件大小的地址
server.use(convert(
body({
uploadDir: path.resolve(__dirname, 'upload'),
maxFileSize: 100*1024
// 单位kb
})
))
server.use(async ctx=>{
console.log(ctx.request.fields);
ctx.body = '上传成功'
});
当我们需要把不同的文件分在不同的文件夹中,该如何处理?
其实router.post或get等等中可以依次写多个函数,如:
router的路径中可以写多个处理函数:
router.post(path, f1, f2, f3, f4)
const Koa = require("koa");
const Router = require("koa-router");
const body = require("koa-better-body");
const convert = require("koa-convert");
const path = require("path");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.post('/upload', async (ctx, next)=>{
try {
await next();
// 在这里使用next() 在catch中捕获
} catch (error) {
console.log("文件过大");
ctx.body = "文件过大";
}
},
convert(
body({
uploadDir: path.resolve(__dirname, 'upload'),
maxFileSize: 100*1024
// 单位kb
})
),
async ctx=>{
console.log(ctx.request.fields);
ctx.body = '上传成功'
}
);
server.use(router.routes());
这样就可以解决。
判断错误信息:
catch中的e有一个message,这里可以看到错误信息:如文件过大
maxFileSize exceeded, received 130923 bytes of file data
状态码选择
const Koa = require("koa");
const Router = require("koa-router");
const body = require("koa-better-body");
const convert = require("koa-convert");
const path = require("path");
let server = new Koa();
let router = new Router();
server.listen(8000);
router.post('/upload', async (ctx, next)=>{
try {
await next();
// 在这里使用next() 在catch中捕获
} catch (e) {
if(e.message.startsWith('maxFileSize exceeded')){
// 如果错误信息以文件为开始报错则提示文件过大
ctx.status = 406;
ctx.body = '文件过大'
}else{
// 其他故障 比如写错代码报500
ctx.body = '500服务器错误'
}
// console.log(e.message)
// ctx.body = "文件过大";
}
},
convert(
body({
uploadDir: path.resolve(__dirname, 'upload'),
maxFileSize: 100*1024
// 单位kb
})
),
async ctx=>{
console.log(ctx.request.fields);
ctx.body = div.txt
// 故意写错的代码
}
);
server.use(router.routes());
封装: 不封装了,太累了
有时间在研究
json
自定义类型
很少用。