3

真的需要帮助。

当 enctype="multipart/form-data" 时,Nodejs 无法接收 POST 请求,浏览器只是挂起.. 没有响应,没有任何反应,然后超时(以后可以在服务器上的指定文件夹中找到具有哈希字符串名称的文件)。该代码在本地进行了测试,可以正常工作。

请求信息(来自 Google Chrome 网络选项卡)

标头:Content-Type:multipart/form-data;

有效负载:内容处置:表单数据;名称=“文件”;文件名="1_leaf_music.png"

回复:空

使用其他编码类型“application/x-www-form-urlencoded”的 POST 请求工作正常,它应该只在“multipart/form-data”时挂起。

安装在 Amazon ec2 虚拟服务器上,其他一切正常。

示例 > 挂起回调 > app.post('/form-file', ... > console.log 从不跟踪

应用程序.js:

var http    = require('http');
var express     = require('express');
var path    = require('path');
var app     = express();

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.bodyParser({uploadDir:__dirname + '/public/uploads'}));
    app.use(express.methodOverride());
    app.use(express.static(path.join(__dirname, 'public')));
});

app.get('/', function(req, res, next) {
    console.log('get:/');
    res.render('index', { title: 'Upload a single file (using Express BodyParser()) ' })
});

app.post('/form-file', function(req, res, next)  {
    console.log("multipart/form-data recived... file recived: ",req.files.file.name);
    res.send("multipart/form-data recived... file recived: " + req.files.file.name);
});

app.post('/form-text', function(req, res, next)  {
    console.log("application/x-www-form-urlencoded: txt: ",req.body.txt);
    res.send("application/x-www-form-urlencoded... txt: " + req.body.txt);
});

var port = 8001;
http.createServer(app).listen(port, function() {
    console.log("Express server listening on port " + port);
});

看法:

<code>
form(method="post", name="f", action="/form-file", enctype="multipart/form-data")
  fieldset
    legend Upload a File
    input(type="file", name="file")
  div.actions
    button.btn.primary(type="submit") Upload
    button.btn.cancel(type="button") Cancel
</code>

亚马逊服务器上相同的代码寿命:http: //node.form.co.il :8001/

更新: 问题出在模块 bodyParser 中。如果它被删除,节点将按预期触发响应。

4

0 回答 0