错误原因分析: Error: Multipart: Boundary not found

d:\fullstack\es6fullstack\10node3>node server_multer.js
Error: Multipart: Boundary not found
at new Multipart (\node_modules\busboy\lib\types\multipart.js:58:11)
at Multipart (\node_modules\busboy\lib\types\multipart.js:26:12)
at Busboy.parseHeaders (\node_modules\busboy\lib\main.js:71:22)
at new Busboy (\node_modules\busboy\lib\main.js:22:10)
at multerMiddleware (\node_modules\multer\lib\make-middleware.js:33:16)
at Layer.handle [as handle_request] (\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (\node_modules\express\lib\router\index.js:317:13)
\node_modules\express\lib\router\index.js:284:7
at Function.process_params (\node_modules\express\lib\router\index.js:335:12)
at next (\node_modules\express\lib\router\index.js:275:10)

错误原因: Multipart没有找到Boundary
分析:
使用Express+multer中间件 上传文件的时候出现的问题。
上传文件 是POST请求 multipart/form-data格式的 form表单
错误原因分析: Error: Multipart: Boundary not found_第1张图片
上图是查看Chrome Network进行分析 ,然后查看请请请求头, 发现Content-Type: multipart/form-data 后面没有跟上boundary
错误原因分析: Error: Multipart: Boundary not found_第2张图片
正确的Content-Type: mutlipart/form-data; boundary = -----xxxx这种形式的
综上推测 设置请求头的时候 多次设置了,覆盖了原有表单enctype=‘multipart/form-data’
最终查找 在xhr.setRequestHeader中 覆盖了 表单form中的 enctype 设置的mutlipart/form-data

综上: 不需要重复设置 Content-Type: mutipart/form-data 否则可能会覆盖原有的, 造成非预期的错误。
具体内部原理 xhr.setRequestHeader 对于Content-Type 和 form表单中enctype的设置 究竟内部如何覆盖,未完待续,有时间在更新编辑。

你可能感兴趣的:(bug,经验之谈)