我正在嘗試使用node.js對服務器端調用restful API。使用JSONP(JS函數內的JSON容器)返回返回的錯誤,這似乎是節點http.get(options,callback)API的核心。節點或任何模塊是否可以從JSONP返回JSON對象?節點返回JSONP的Restful api的HTTP請求
10
A
回答
6
我會寫來檢查JSON和剝掉返回字符串的功能只是爲了避免運行的eval包裝函數。然後JSON.parse字符串(現在減去函數,因爲我們刪除它)返回json。
var request = require('request');
var getJsonFromJsonP = function (url, callback) {
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonpData = body;
var json;
//if you don't know for sure that you are getting jsonp, then i'd do something like this
try
{
json = JSON.parse(jsonpData);
}
catch(e)
{
var startPos = jsonpData.indexOf('({');
var endPos = jsonpData.indexOf('})');
var jsonString = jsonpData.substring(startPos+1, endPos+1);
json = JSON.parse(jsonString);
}
callback(null, json);
} else {
callback(error);
}
})
}
然後使用它像這樣:
getJsonFromJsonP('http://www.linkedin.com/countserv/count/share?url=http://techcrunch.com/2012/01/29/turning-two-founderscard-pulls-back-the-curtain-on-its-membership-community-for-entrepreneurs/', function (err, data) {
console.log('data count', data.count);
});
8
與vm
JavaScript code can be compiled and run immediately or compiled, saved, and run later
前面的回答中建議的條帶化回調函數執行回調。不幸的是,這與許多jsonp響應不兼容,因爲函數的內容通常是對象而不是純JSON。的JSON.parse()來函數將用於類似下面的死:
callback({key:"value"});
儘管上面是一個有效的對象,它是無效的JSON。
下面將進行回調並返回對象:
jsonpSandbox = vm.createContext({callback: function(r){return r;}});
myObject = vm.runInContext(jsonpData,jsonpSandbox);
當創建上下文變化callback
到在JSONP響應返回的回調函數的名稱。
+2
briliant。完美的作品。 – 2015-03-19 17:15:27
相關問題
- 1. 節點請求返回ECONNREFUSED
- 2. RESTful HATEOAS API中的HTTP POST請求
- 3. 返回JSONP的懸浮大氣請求
- 4. 節點JS上的HTTP請求回調與節點JS
- 5. 節點API請求
- 6. Codeigniter RESTful API - HTTP/1.1 400錯誤請求
- 7. 節點Restful返回數組JSON
- 8. 節點js-授權RESTFUL API請求的最佳實踐
- 9. ECONNREFUSED,節點HTTP GET請求
- 10. HTTPS到HTTP JSONP請求
- 11. POST請求節點返回404
- 12. 如何從WCP請求返回JSONP?
- 13. Http API請求
- 14. RestFul Web服務返回HTTP/1.1 400錯誤請求
- 15. 節點JS使用數據從請求/請求API調用返回
- 16. Http請求不返回
- 17. ScriptResource.axd請求返回HTTP 302
- 18. 請求URI返回HTTP 401
- 19. 節點api不返回數據給客戶端ajax請求
- 20. 節點google api不返回'請求'對象
- 21. Zend_Form和RESTful HTTP請求
- 22. 對Yelp API的HTTP請求返回缺少的參數錯誤
- 23. 節點HTTPS請求不返回Lambda中的回調函數
- 24. Asynchronus HTTP請求返回Swift中的值
- 25. HTTP請求未返回所需的JSON
- 26. API GET請求返回404
- 27. Yammer API請求返回401
- 28. 節點 - 簡單的XML API請求
- 29. 節點中的JS Api請求循環
- 30. PHP - 保護RESTful API請求
你能不能代碼?我注意到在url中沒有回調引用。通常這看起來像&callback = foo或&jsonp = bar。 LinkedIn看起來像迴應迴應。然後,您可以使用url.parse來查找該參數並採取相應措施。 – booyaa 2012-01-30 11:35:07
request = require('request'); request({uri:'http://graph.facebook.com/?ids=http://appsumo.com'},function(err,responser,body){myObject = eval('('+ body +') )'); }; – user690740 2012-02-02 11:15:45
帶有linkedin的回調參數(&callback = functionName)讓我可以將包裝器函數更改爲我希望的任何名稱(但不能將它們一起移除)如果我能得到有效的響應(JSON或JSONP)從模塊或API HTTP請求與JS下的節點。我會是一個快樂的人。 – user690740 2012-02-02 11:19:47