web-dev-qa-db-fra.com

noeud js envoie une demande de publication avec le corps de la demande brute

var req ={
      "request": {
        "header": {
          "username": "name",
          "password": "password"
        },
        "body": {
        "shape":"round"    
    }
      }
    };

    request.post(
        {url:'posturl',

        body: JSON.stringify(req),
        headers: { "content-type": "application/x-www-form-urlencoded"}
        },
        function (error, response, body) {        
            if (!error && response.statusCode == 200) {
                console.log(body)
            }
        }
    );

Je veux envoyer le corps de la requête brute dans la variable req. Il travaille sur postman, mais dans le nœud js, je ne parviens pas à envoyer le JSON brut en tant que corps de requête pour post-requête.

8
Zack Sac S

Vous essayez d'envoyer JSON (votre variable req) mais vous l'analysez comme une chaîne (JSON.stringify(req)). Comme votre itinéraire attend JSON, il échouera probablement et renverra une erreur. Essayez la demande ci-dessous:

request.post({
    url: 'posturl',
    body: req,
    json: true
}, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        console.log(body)
    }
});

Au lieu de définir vos en-têtes, vous pouvez simplement ajouter l'option json: true si vous envoyez du JSON.

8
Thomas Bormans

Changez le Content-Type en application/json, car votre corps est au format JSON.

2

Ajouter le 'Content-Length' dans l'en-tête de la chaîne ajoutée dans le corps résoudra ce problème. Cela a fonctionné pour moi.

en-têtes: {"Cache-Control": "no-cache", "Content-Type": "application/json; charset = UTF-8", 'Content-Length': req.length }

0
Ram