2016-12-28 219 views
0

我想從節點js應用程序發送一些JSON數據到另一個寫在Flask中的web服務。我正嘗試使用請求庫並查看問題hereherenode js request.post callback not firing

基於這些例子,我想出了以下簡單的應用程序。該應用程序發送JSON數據到我的燒瓶服務器,但不會/觸發回調。我已經檢查過Flask應用程序通過postman返回一些數據,它工作正常。 我哪裏錯了?

[這是我整個app.js]

var express = require("express"); 
    var request = require('request'); 
    var app = express(); 

    app.set('view engine', 'pug'); 
    app.get('/', function(req, res) { 
    console.log("here...") 
     request({ 
      url: 'http://localhost:5000/receive_user_response', 
      method: "POST", 
      headers: { 
       "content-type": "application/json" 
      }, 
      json: { // <--- I have also tried calling this as "body" 
       user_id: "some id...", 
       user_info: "some info..." 
      }, 
     function(err, res, data) { 
      console.log('err', err) // <---- never prints any thing from here! 
      console.log('res', res) 
      console.log('data', data) 
       if (!err && res.statusCode == 200) { 
        console.log(data); 
       } 
      } 
    }) 
    console.log("here...done..") 
    }); 

    var server = app.listen(3000, function() { 
     console.log("Listening on port %s...", server.address().port); 
    }); 
+0

我不確定這是否只是一個問題,把你的代碼放到SO中,但是在你的回調函數之前你似乎缺少一個'}'。 –

+0

你確定..看起來對我... –

+1

是的,我很確定。你在'request'({'後面跟着屬性'url','method','headers'和'json'}開頭,在'json'結束'}'後,你立即擁有你的回調函數'callback'是一個獨立的參數 –

回答

0

回調函數必須是request函數的第二個參數。你不小心把它放在json對象中。以下將起作用。

request({ 
    url: 'http://localhost:5000/receive_user_response', 
    method: "POST", 
    headers: { 
     "content-type": "application/json" 
    }, 
    json: { // <--- I have also tried calling this as "body" 
     user_id: "some id...", 
     user_info: "some info..." 
    } 
    }, 
    function(err, res, data) { 
    console.log('err', err) // <---- never prints any thing from here! 
    console.log('res', res) 
    console.log('data', data) 
    if (!err && res.statusCode == 200) { 
     console.log(data); 
    } 
    } 
) 

但是,這絕對是更好的閱讀。

let options = { 
    url: 'http://localhost:5000/receive_user_response', 
    method: "POST", 
    headers: { 
    "content-type": "application/json" 
    }, 
    json: { // <--- I have also tried calling this as "body" 
    user_id: "some id...", 
    user_info: "some info..." 
    } 
}; 


request(options, 
    function(err, res, data) { 
    console.log('err', err) // <---- never prints any thing from here! 
    console.log('res', res) 
    console.log('data', data) 
     if (!err && res.statusCode == 200) { 
     console.log(data); 
     } 
    } 
) 
0

這不是真正的答案,但我能得到它通過使用request-promise,而不是要求工作。

var express = require("express"); 
var app = express(); 
var rp = require('request-promise'); 

var options = { 
    method: 'POST', 
    uri: 'http://localhost:5000/receive_user_response', 
    body: { 
     some: 'payload' 
    }, 
    json: true // Automatically stringifies the body to JSON 
}; 

app.set('view engine', 'pug'); 
app.get('/', function(req, res) { 

    rp(options).then(function(res) { 
     console.log(res); 

    }).catch(function(err) { 
     console.log("error!"); 
    }); 

}); 

var server = app.listen(3000, function() { 
    console.log("Listening on port %s...", server.address().port); 
});