2017-09-05 2 views
0

Ich versuche, eine POST-Anfrage senden 2 Params mit HTTPClient für NodeJS.Params leer bei POST-Anfrage

var HTTPClient = require('httpclient') 

var options = { 
    hostname: 'localhost', 
    path: '/', 
    port: 8081, 
    secure: false, 
    method: 'POST', 
    headers: { 
     'x-powered-by': 'HTTPClient.js' 
    }, 
    'Content-Type': 'application/x-www-form-urlencoded', 
    params:{ 
     command:'TEST', 
     param1:'TEST' 
    } 
} 

var example1 = new HTTPClient(options) 
example1.post('/executeGraph1', function (err, res, body) { 
    console.log(typeof body,body); 
}) 

Dann Express Ich bin mit der POST-Anfrage

var express = require('express'); 
var app = express(); 
var path = require('path'); 
var bodyParser = require('body-parser'); 

// configure the app to use bodyParser() 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
app.use(bodyParser.json()); 
app.use(express.static(path.join(__dirname, ''))); 

app.post('/executeGraph1', function (req, res) { 
    console.log("Got a POST request for grahBar"); 

    console.log("params",req.params); 
    console.log("body",req.body); 
    console.log("query",req.query); 
}) 

var server = app.listen(8081, function() { 

    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port) 
}) 

I-Lösungen wie mit 'Content-Type': 'application/x-www-form-urlencoded' Oder app.use(bodyParser.urlencoded({extended: true})); in anderer Frage habe versucht zu fangen, aber evrery Mal, wenn ich leer Variablen immer halten. Ich habe versucht, in den Eigenschaften body, params oder query zu suchen, aber alle drei Optionen sind leere Arrays

Weiß jemand, was hier falsch läuft?

+0

Ändern Sie den 'Content-Type' ->' 'Content-Type': 'application/x-www-form-urlencoded'' zu -> 'Content-Type': 'application/json' – swapnesh

+0

@swapnesh I hab das schon probiert aber das ergebnis ist das gleiche :( –

Antwort

2

Ihr Server-Code in Ordnung ist, req.query Abfrage-Parameter enthalten, aber req.params wird verwendet, wenn Ihre Route-String, wie die /executeGraph1/:paramName definiert es könnte mehr params mit : für beispiels /res1/:param1/res2/:param2/:param3 Präfix sein.

Altough Ich habe nicht Httpclient-Modul wurde unter Verwendung, das Hinzufügen Query-String in URL funktioniert, z

example1.post('/executeGraph1?queryParamName=value', function (err, res, body) { 
    console.log(typeof body,body); 
    }) 

Ersetzen params mit query in Ihren Optionen Variable auch funktionieren.

Ich würde vorschlagen, stattdessen https://github.com/request/request zu verwenden.

Eine letzte Sache in Ihrem POST-Handler als letzte Zeile hinzufügen res.end() Wenn Sie dies nicht tun, wird Ihre Anfrage hängen und warten auf Timeout. end kann Argument nehmen, das an den Client gesendet wird.

Verwandte Themen