快递处理后回复的奇怪处理

时间:2013-07-14 22:44:32

标签: node.js post curl express

我遇到了一个奇怪的处理问题。当我不使用express时,我能够通过NodeJS检索预期的响应。

下面是我的代码片段,它与NodeJS配合使用

var http = require('http');

var url = require('url');

function start(route, handle){
        function onRequest(request, response){
                var postData = "";
                var pathName = url.parse(request.url).pathname;

                console.log('request obtained for '+pathName);

                request.setEncoding('utf8');
                request.addListener('data', function(chunk){
                        postData += chunk;
                        console.log(chunk);
                });

                request.addListener('end', function(){
                        **console.log(request.headers);**
                        route(handle, pathName, response, postData);
                });

        }

        http.createServer(onRequest).listen(69);
        console.log('server start on 69');
}

exports.start=start;

请求处理程序文件的一部分,并在提交表单数据时调用上载函数。我打印的标题来自我在请求结束时的监听器。

function upload(response, postData){
        console.log('Request handler upload');
        var res = querystring.parse(postData).text;
        console.log(res);

        response.writeHead(200, {"Content-Type":"text/html"});
        response.write('You sent a text: '+res);
        console.log(postData);

        response.end();
}

我对上传功能进行的卷曲调用(此处我尚未上传任何文件或图片,因此现在只进行文本传输)

curl -d "username=moderation&moderation.item[0].uid=4&moderation.item[0].action=approved" -H 'Content-Type: application/x-www-form-urlencoded' http://localhost:69/upload

来自curl调用的请求标头调用nodejs上运行的应用程序

{ 'user-agent': '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',
  host: 'localhost:69',
  accept: '*/*',
  'content-type': 'application/x-www-urlencoded',
  'content-length': '75' }
request to router for path/upload
Request handler upload
text=moderation&moderation.item[0].uid=4&moderation.item[0].action=approved

当你看到身体按预期出现时。

现在,下面是我的快递应用程序的代码,几乎可以做同样的事情。

/**
 * 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("<h1> 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 -d "username=moderation&moderation.item[0].uid=4&moderation.item[0].action=approved" -H 'Content-Type: application/x-www-form-urlencoded' http://localhost:3000/upload

标题和响应如下。

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: 'moderation',
  'moderation.item': { '0].ui': '4', '0].actio': 'approved' } }
POST /upload 200 69ms - 32b

所以回来的反应体是扭曲的。当我调用我的nodejs应用程序时,我正在

text=moderation&moderation.item[0].uid=4&moderation.item[0].action=approved

而对于我的快递应用,我正在

{ username: 'moderation',
  'moderation.item': { '0].ui': '4', '0].actio': 'approved' } }

我尝试过使用connect.bodyParser()&amp;也只是表达.urlencoded(),认为bodyParser方法已经搞砸了我的帖子数据。我仍然认为它是bodyParser,但我无法找到摆脱这个问题的方法。

很抱歉帖子的长度,但我想提供所有可能的数据。

感谢任何帮助。

谢谢。

0 个答案:

没有答案