MIME 与 Nodejs 的小故事
之前同学问了我一个问题,他用 Java 写的客户端并发出的请求在 Java 的服务端可以接收,他想改成 Node.js 的服务端,但是就遇到了没法正确处理的问题。
经过 Header 的查看,首先我们发现了 Header 中没有 content-type
,最初我的思考角度在于 content-type
没有的情况下,会不会存在 Java 服务端的默认值而 Node.js 的服务器并没有处理。由于他说传的是二进制文件,想当然的想到了 multipart/form-data
,但是对于 multipart
而言,应该是有特殊首部要求的,明显不满足这个条件。
后来查了很久,才发现 MDN 中有这么一句话:
对于text
文件类型若没有特定的subtype
,就使用text/plain
。类似的,二进制文件没有特定或已知的subtype
,即使用application/octet-stream
。
现在我们知道了 header,下一步就是怎么处理了,因为 koa-body
不对这种类型进行处理,而 express 的 body-parser 中已经带了 raw
方法来处理这种情况,可以直接使用,koa 也有人做了一个中间件 raw-body
。
更重要的是,我们仍然想要了解到底发生了啥,到底要怎么写,于是我们翻到了 Node 官方的帮助 demo,借此自己糊了一个 middleware:
const Koa = require('koa')
const app = new Koa()
const mid = (ctx, next) => {
const req = ctx.req
const body = []
req.on('data', (chunk) => body.push(chunk))
req.on('end', () => {
ctx.request.body = body
next()
})
}
app.use(mid)
app.use((ctx, next) => {
console.log(ctx.request.body)
})
app.listen(3000)
参考链接:
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。