2013-04-24 17 views
25

Chciałem wiedzieć, jak przekazać żądanie json w danych dla np {'name' : 'test', 'value' : 'test'}:Jak należy przekazać dane json na żądanie ładowności żądania HTTP POST

var post_data = {}; 

    var post_options = { 
     host: this._host, 
     path: path, 
     method: 'POST', 
     headers: { 
     Cookie : "session=" + session, 
      'Content-Type': 'application/json', 
      'Content-Length': post_data.length, 
     } 
    }; 

    // Set up the request 
    var post_req = http.request(post_options, function(res) { 
     res.setEncoding('utf8'); 
     res.on('data', function (chunk) { 
      console.log('========Response========: ' + chunk); 
     }); 
    }); 

    // post the data 
    post_req.write(post_data); 
    post_req.end(); 

dzięki za pomaga. Prats

+0

Czy to odpowiada na twoje pytanie? http://stackoverflow.com/questions/4505809/how-to-post-to-a-request-using-node-js – exclsr

Odpowiedz

69

pomocą modułu request

npm install -S request

var request = require('request') 

var postData = { 
    name: 'test', 
    value: 'test' 
} 

var url = 'https://www.example.com' 
var options = { 
    method: 'post', 
    body: postData, 
    json: true, 
    url: url 
} 
request(options, function (err, res, body) { 
    if (err) { 
    console.error('error posting json: ', err) 
    throw err 
    } 
    var headers = res.headers 
    var statusCode = res.statusCode 
    console.log('headers: ', headers) 
    console.log('statusCode: ', statusCode) 
    console.log('body: ', body) 
}) 
+2

Chciałbym coś tutaj zweryfikować. Czy "body: postData" jest poprawne, czy też postData musi być uszeregowane, tak jak w 'body: JSON.stringify (postData); ? dzięki. – Ric

+0

@Noah jak to się zmienia, jeśli chcę użyć 'request.post (...)'? Większość żądań, które aplikacja klienta (aplikacja Electron) będzie wysyłała, zawiera ciała oparte na JSON, z wyjątkiem wyjątków będących obiektami wieloczęściowymi. Miałem problem z wymyśleniem właściwego sposobu korzystania z tej biblioteki i ustawień 'bodyParser' w aplikacji Express (po stronie serwera). Używam 'app.use (bodyParser.json())' i 'app.use (bodyParser.urlencoded ({extended: true})) ;, a żądania nie zostały przeanalizowane dopóki nie zmieniłem' extended' na false. Nie wiem, jak to jest istotne dla wniosków JSON, co jest przyczyną mojego nieporozumienia. –

+0

pro rozwiązanie dziękuję –

1

Wystarczy przekonwertować na ciąg i wysłać.

post_req.write(JSON.stringify(post_data)); 
0

próbowałem tego i to wydaje się być working.I potrzebne podstawowe auth więc mam włączone uwierzytelniania, jeśli nie jest to potrzebne można go wyrzucić.

var value = {email:"",name:""}; 

var options = { 
     url: 'http://localhost:8080/doc/', 
     auth: { 
      user: username, 
      password: password 
     }, 
     method :"POST", 
     json : value, 

    }; 

    request(options, function (err, res, body) { 
     if (err) { 
      console.dir(err) 
      return 
     } 
     console.dir('headers', res.headers) 
     console.dir('status code', res.statusCode) 
     console.dir(body) 
    });