0

我是节点 js 和 express 的新手。我今天能够获得我的第一个 Node JS 表单,它按预期工作。所以我想在 Express 上重新创建相同的内容,但由于某种原因,我在编程上失败了。我能够跟踪标题和正文,但由于某种原因,我无法理解为什么 Express 会重写正文的处理方式。

我正在添加我的发现。下面是代码,这是通过 express 命令行工具生成的。这是app.js 文件,方法upload 是在找一些数据。目前我没有处理任何文件上传,我只是在寻找一些要遇到的文本。

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);


    
/**custom stuff**/

app.post('/upload',function(req, res){
        console.log(req.header('Content-Type'));
        console.log(req.header('Host'));
        console.log(req.header('User-Agent'));

        console.log(req.body);
        res.send("Hello the response is "+req.body.username);
});

/** end**/

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

现在我对该函数进行 curl 调用。

curl -d '{"username":"myname"}' -H 'Content-Type: application/x-www-form-urlencoded' http://localhost:3000/upload

这些是标题和正文。(标题在第 3 行结束,正文在第 4 行)

application/x-www-form-urlencoded
localhost:3000
curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
{ '{"username":"myname"}': '' }
POST /upload 200 7ms - 36b

现在,我使用了 Google Chrome 的Advanced Rest Client App,下面是标题和正文。

application/x-www-form-urlencoded
localhost:3000
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
{ username: 'myname from adv rest client app' }
POST /upload 200 5ms - 58b

因此,让我感到困惑的一件事是,为什么其余客户端应用程序发出的请求的主体格式正确且完整,而我的请求主体却被扭曲了。任何人都可以在这里帮我解决这个问题。

谢谢

4

1 回答 1

0

问题可能出在curl命令的数据/标题组合中,因为使用的数据格式 (JSON) 之间似乎不匹配:

-d '{"username":"myname"}'

以及指定的格式(URL 编码):

-H 'Content-Type: application/x-www-form-urlencoded'

对于URL 编码的数据,请尝试:

-d 'username=myname'

此外,由于您正在处理文件上传,您可能希望指定multipart/form-data或使用设置它的-F/--form选项:

curl -F 'username=myname' http://localhost:3000/upload
于 2013-07-14T07:21:36.073 回答