ERR_EMPTY_RESPONSE 在 Node.js 中使用多方包时出错
ERR_EMPTY_RESPONSE error using multiparty package in Node.js
我是 Node.js 的新手,正在尝试从我的 html 上传图片。我使用下面的 html 代码创建了可以将图像上传到我的网络应用程序的按钮。
<li><a onclick="getFile()" style="cursor:pointer; color:#000000;">Choose File</a></li>
<li><a onclick="uploadFile();" style="cursor: pointer; color:#000000;">Upload</a></li>
<li><a onclick="save2()" id="imageSave" style="cursor:pointer; color:#000000;">Save</a></li>
<li><a href="/location" style="color:#000000">Back to view</a></li>
<form action="/upload", method="post", enctype="multipart/form-data">
<div style='height:0px; width:0px; overflow:hidden;'><input type="file" name="upFile" id="upFile" onchange="getCmaFileView(this, 'name')" target="dropzone_1"/></div>
<div style='height:0px; width:0px; overflow:hidden;'><input type="submit" name="Upload" id="Upload" /></div>
</form>
点击上传 li
后,它会通过使用如下代码的多方包从 node.js 上传图像。
app.post('/upload', function(req, res, next) {
var form = new multiparty.Form();
// get field name & value
form.on('field',function(name,value){
console.log('normal field / name = '+name+' , value = '+value);
});
// file upload handling
form.on('part',function(part){
var filename;
var size;
if (part.filename) {
filename = part.filename;
size = part.byteCount;
}else{
part.resume();
}
console.log("Write Streaming file :"+global_username);
var writeStream = fs.createWriteStream('/opt/work/files/'+global_username);
writeStream.filename = filename;
part.pipe(writeStream);
part.on('data',function(chunk){
console.log(global_username+'.png'+' read '+chunk.length + 'bytes');
});
part.on('end',function(){
console.log(global_username+'.png'+' Part read complete');
writeStream.end();
});
});
// all uploads are completed
form.on('close',function(){
res.status(200);
});
// track progress
form.on('progress',function(byteRead,byteExpected){
console.log(' Reading total '+byteRead+'/'+byteExpected);
});
form.on('error',function(){
console.log('error');
});
form.parse(req);
});
它保存了一张图片并上传得很好,但在等待一段时间后显示错误并显示 ERR_EMPTY_RESPONSE
消息。
我认为是因为响应。这意味着在 header 去 post 之后,应该给它返回响应,但它没有。
实际上,我在上面的 Node.js
代码中编写了返回响应的代码
form.on('close',function(){
res.status(200);
});
但是还是报同样的错误...不知道为什么。
有人有想法吗?还是我错了?
您没有return响应客户端res.status(200)
将状态设置为响应然后您需要调用res.send()
我是 Node.js 的新手,正在尝试从我的 html 上传图片。我使用下面的 html 代码创建了可以将图像上传到我的网络应用程序的按钮。
<li><a onclick="getFile()" style="cursor:pointer; color:#000000;">Choose File</a></li>
<li><a onclick="uploadFile();" style="cursor: pointer; color:#000000;">Upload</a></li>
<li><a onclick="save2()" id="imageSave" style="cursor:pointer; color:#000000;">Save</a></li>
<li><a href="/location" style="color:#000000">Back to view</a></li>
<form action="/upload", method="post", enctype="multipart/form-data">
<div style='height:0px; width:0px; overflow:hidden;'><input type="file" name="upFile" id="upFile" onchange="getCmaFileView(this, 'name')" target="dropzone_1"/></div>
<div style='height:0px; width:0px; overflow:hidden;'><input type="submit" name="Upload" id="Upload" /></div>
</form>
点击上传 li
后,它会通过使用如下代码的多方包从 node.js 上传图像。
app.post('/upload', function(req, res, next) {
var form = new multiparty.Form();
// get field name & value
form.on('field',function(name,value){
console.log('normal field / name = '+name+' , value = '+value);
});
// file upload handling
form.on('part',function(part){
var filename;
var size;
if (part.filename) {
filename = part.filename;
size = part.byteCount;
}else{
part.resume();
}
console.log("Write Streaming file :"+global_username);
var writeStream = fs.createWriteStream('/opt/work/files/'+global_username);
writeStream.filename = filename;
part.pipe(writeStream);
part.on('data',function(chunk){
console.log(global_username+'.png'+' read '+chunk.length + 'bytes');
});
part.on('end',function(){
console.log(global_username+'.png'+' Part read complete');
writeStream.end();
});
});
// all uploads are completed
form.on('close',function(){
res.status(200);
});
// track progress
form.on('progress',function(byteRead,byteExpected){
console.log(' Reading total '+byteRead+'/'+byteExpected);
});
form.on('error',function(){
console.log('error');
});
form.parse(req);
});
它保存了一张图片并上传得很好,但在等待一段时间后显示错误并显示 ERR_EMPTY_RESPONSE
消息。
我认为是因为响应。这意味着在 header 去 post 之后,应该给它返回响应,但它没有。
实际上,我在上面的 Node.js
代码中编写了返回响应的代码form.on('close',function(){
res.status(200);
});
但是还是报同样的错误...不知道为什么。
有人有想法吗?还是我错了?
您没有return响应客户端res.status(200)
将状态设置为响应然后您需要调用res.send()