4

node.jsのPOSTデータの抽出を読みました。

しかし、これが私の問題です。このようなHTTPリクエストを受け取ったときにExpressでPOSTデータを抽出するにはどうすればよいですか?

POST /messages HTTP/1.1
Host: localhost:3000 
Connection: keep-alive
Content-Length: 9
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5 
Content-Type: application/xml 
Accept: */* 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: zh-TW,zh;q=0.8,en-US;q=0.6,en;q=0.4 Accept-Charset: UTF-8,*;q=0.5 

msg=hello

msg=helloExpressではキーと値のペアを本体から取り出せないようです。

これらの方法をすべて試しましreq.header() req.param() req.query() req.bodyたが、空のようです。

体の内容を取得する方法は?

app.post('/messages', function (req, res) {
    req.??
});
4

5 に答える 5

3

あなたの問題はbodyParserが'application/ xml'を処理しないことです、私は主にこの投稿を読むことによってこれを解決しました:https ://groups.google.com/forum/?fromgroups=#!topic/express-js/6zAebaDY6ug

あなたはあなた自身のパーサーを書く必要があります、私はgithubにもっと詳細で以下を公開しました:

https://github.com/brandid/express-xmlBodyParser

var utils = require('express/node_modules/connect/lib/utils', fs = require('fs'), xml2js = require('xml2js');

function xmlBodyParser(req, res, next) {
    if (req._body) return next();
    req.body = req.body || {};

    // ignore GET
    if ('GET' == req.method || 'HEAD' == req.method) return next();

    // check Content-Type
    if ('text/xml' != utils.mime(req)) return next();

    // flag as parsed
    req._body = true;

    // parse
    var buf = '';
    req.setEncoding('utf8');
    req.on('data', function(chunk){ buf += chunk });
    req.on('end', function(){  
        parser.parseString(buf, function(err, json) {
            if (err) {
                err.status = 400;
                next(err);
            } else {
                req.body = json;
                next();
            }
        });
    });
}

その後、それを使用します

app.use (xmlBodyParser);
于 2013-01-02T16:10:05.737 に答える
2

構成にこれがある場合:

app.use(express.bodyParser());

そして、これはあなたの見解では:

form(name='test',method='post',action='/messages')
    input(name='msg')

次に、これは機能するはずです:

app.post('/messages', function (req, res) {
    console.log(req.body.msg);
    //if it's a parameter then this will work
    console.log(req.params.msg)
});
于 2012-06-15T15:21:24.620 に答える
0

bodyParserミドルウェア を使用するには、エクスプレスを構成する必要があると思います。app.use(express.bodyParser());

エクスプレスドキュメントを参照してください。

それは言います:

たとえば、json を POST し、bodyParser ミドルウェアを使用して json をエコー バックします。bodyParser ミドルウェアは、json リクエスト ボディ (およびその他) を解析し、結果を req.body に配置します。

req.body()予想される投稿本文を返す必要があります。

これが役立つことを願っています!

于 2012-06-12T18:36:08.703 に答える
0

You are posting xml as I can see, the answers you got were based on JSON input. If you want the content of your xml displayed, process the raw request :

app.post('/processXml',function (req, res)
{
    var thebody = '';
    req.on('data' , function(chunk)
    {
        thebody += chunk;
    }).on('end', function()
    {
        console.log("body:", thebody);
    });
});

As an example using curl as your postman:

curl -d '<myxml prop1="white" prop2="red">this is great</myxml>' -H 
"Content-type: application/xml" -X POST 
http://localhost:3000/processXml

Outputting:

'<myxml prop1="white" prop2="red">this is great</myxml>'

Make sure your body-parser middleware doesn't get in the way: body-parser-xml processes your request object on the fly to a json object, after which you cannot process your raw request anymore. (And you can guess who was stuck several hours after this...)

于 2017-12-06T10:41:32.967 に答える