2017-09-25 5 views
0

je suis en train de faire une demande REST HTTPS dans les nodejs en utilisant le code suivant:NodeJS créer HTTPS demande corps Rest JSON

var querystring = require('querystring'); 
var https = require('https'); 

var postData = { 
    'Value1' : 'abc1', 
    'Value2' : 'abc2', 
    'Value3' : '3' 
}; 
var postBody = querystring.stringify(postData); 

var options = { 
    host: 'URL' 
    port: 443, 
    path: 'PATH' 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded', 
     'Content-Length': postBody.length 
    } 
}; 

var req = https.request(options, function(res) { 
    console.log(res.statusCode); 
    res.on('data', function(d) { 
    process.stdout.write(d); 
    }); 
}); 
req.write(postBody); 
req.end(); 

req.on('error', function(e) { 
    console.error(e); 
}); 

Les travaux de demande, mais pas comme prévu. Le corps va se transmet pas en JSON Format et ressemble à:

RequestBody":"Value1=abc1&Value2=abc2&Value3=3

La sortie devrait ressembler à ça:

RequestBody":"[\r\n {\r\n \"Value3\": \"3\",\r\n \"Value2\": \"abc2\",\r\n \"Value1\": \"abc1\"\r\n }\r\n]

Je pense qu'il a quelque chose à voir avec stringify, peut-être que je dois convertir au format JSON de toute façon ..

Répondre

0

Dans les en-têtes de la demande est spécifié le 'Content-Type': 'application/x-www-form-urlencoded'. Vous pouvez essayer de changer cela en 'Content-Type': 'application/json'.

+0

Cela n'a pas changé la sortie, merci quand même. –

+0

Je viens de me rendre compte que vous transmettez les données sous forme de chaîne. Ce n'est pas nécessaire, vous pouvez simplement passer un objet. – Eliasib13

+0

Si j'essaie ceci en supprimant la commande stringify, j'obtiendrai l'erreur suivante: TypeError: Le premier argument doit être une chaîne ou Buffer –

0

vous devez changer-type.try contenu comme celui-ci

var querystring = require('querystring'); 
var https = require('https'); 

var postData = { 
    'Value1' : 'abc1', 
    'Value2' : 'abc2', 
    'Value3' : '3' 
}; 
var postBody = postData; 

var options = { 
    host: 'URL' 
    port: 443, 
    path: 'PATH' 
    method: 'POST', 
    headers: { 
     'Content-Type': 'application/json', 

    } 
}; 

var req = https.request(options, function(res) { 
    console.log(res.statusCode); 
    res.on('data', function(d) { 
    process.stdout.write(d); 
    }); 
}); 
req.write(postBody); 
req.end(); 

req.on('error', function(e) { 
    console.error(e); 
}); 
+0

Même erreur que ci-dessus: TypeError: Le premier argument doit être une chaîne ou un Buffer –

0

Je résolu mon problème avec ce qui suit.

jsonObject = JSON.stringify({ 
    'Value1' : 'abc1', 
    'Value2' : 'abc2', 
    'Value3' : '3' 
}); 
var postheaders = { 
    'Content-Type' : 'application/json', 
    'Content-Length' : Buffer.byteLength(jsonObject, 'utf8') 
};