使用node.js上载文件时出错
Error uploading file with node.js
使用下面的代码,当我尝试上传文件时,浏览器会一直加载。知道为什么吗?
app.js
var formidable = require('formidable'),
http = require('http'),
util = require('util');
app.get('/song/add', function (req, res) {
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/song/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="title"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
});
app.post('/song/upload', function (req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:'n'n');
res.end(util.inspect({fields: fields, files: files}));
});
return;
});
只要删除代码中的那一行(app.use(express.bodyParser())
),我相信这应该会起作用。
但是你为什么要用可怕的?我相信express body解析器是基于强大的,而且使用起来更干净。由于它甚至解析其他类型的主体,除了JSON之类的表单类型之外,但如果主体类型不受支持,它将抛出错误。如果你的代码中有app.use(express.bodyParser())
,那么你可以这样做来获得你想要的:
app.post('/song/upload', function(req, res){
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:'n'n');
res.end(util.inspect(req.body));
return;
});
您可能已经打开了express body解析器选项。请检查您的配置以了解以下内容:
app.use(express.bodyParser())
我认为问题是Formidable期望这个文件的流事件&在调用app.post
回调时,它们已经被Express消耗掉了。由于form.parse
回调仅在end
上触发,因此从不呈现任何响应。
解决方案是使用Express或Formidable,如果您想使用Formidable则可以禁用配置选项。
我在这里看到的问题是新的body解析器(自Connect 1.8.0以来)。如果你想使用强大的新Connect,你需要从body解析器中删除多部分解析器:
delete express.bodyParser.parse['multipart/form-data'];
不要在Express4.x中使用bodyParser:http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html
使用
app.use(express.json());
app.use(express.urlencoded());
相反。代码的问题在于,您将在调用回调之前返回,因此不会将结果发送给用户。
将您的代码更改为:
返回res.end(util.vinspect({fields:fields,files:files}));
并在末端移除返回。
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Composer-view.js文件出错
- 从静态文件加载json时出错
- 代码在shell中运行,但提供'可以't查找变量'从文件运行时出错
- 从.ascx文件调用Javascript函数时出错
- 使用 broccoli-requirejs 从同一棵树构建两个不同的文件时出错
- Jquery Ajax 上传大文件会出错
- 在使用 GULP 任务将所有 JS 连接到单个 JS 文件中时,在 AngularJS 中出错
- 从 JavaScript 中的本地 JSON 文件读取时出错
- 将内联 Javascript 移动到外部文件时出错 - 我该如何解决这个问题
- Ajax 调用时出错 ->发送两个文件而不是一个文件
- 在 Ember 插件中导入配置文件时出错
- 从另一个文件调用Javascript对象时出错
- 在nodeJS和Express框架中找不到文件时出错
- 在asp.net中打开名为ambersand的文件时出错
- Ajax调用工作正常,但php文件在从对象检索属性时出错
- javascript文件出错,但控制台没有
- 在Vim中保存JavaScript文件时出错
- 404在nodejs+Ionic应用程序中从index.html中的另一个文件夹导入js文件时出错
- 以firefox扩展名创建文件时出错