我无法理解像multer
甚至body-parser
这样的解析器库是如何工作的。从post请求中的哪些数据创建request.body。如果我使用html表单上传文件
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="upload">
</form>
我只是按原样发布请求,我找不到上传文件的任何部分(如文件名或大小......)。但是当我使用multer
时,它会出现在request.body
和request.file
中,怎么样?
答案 0 :(得分:1)
必须明确读取包含表单(或ajax请求等)中的数据的请求正文。可以使用request
,IncomingMessage
作为Readable
stream来访问它。
例如,对bodyParser.urlencoded()
的基本看法可以是以下内容,从request
&#34; 流动模式&#34;中检索正文。使用'data'
和'end'
事件:
var querystring = require('querystring');
app.use(function (request, response, next) {
// skip middleware if not relevant to the current request
if ('application/x-www-form-urlencoded' !== request.headers['content-type'])
return next();
var chunks = [];
// The 'data' event can occur multiple times
// each given only part of the message.
// So, just collect the parts at this point.
request.on('data', function (chunk) {
chunks.push(chunk);
});
// The 'end' event occurs once after all 'data' chunks have arrived.
// Now, it's ready to parse.
request.on('end', function () {
try {
// combine all of the 'data' chunks together
var bodyContent = Buffer.concat(chunks);
// parse and modify the `request` so the data is accessible later
request.body = querystring.parse(bodyContent);
next(); // success
} catch (error) {
next(error);
}
});
request.on('error', function (error) {
next(error);
});
});