node.jsを使用して、安らかなAPIにサーバー側の呼び出しをしようとしています。 JSONP(JS関数内のJSONコンテナ)を返すと、ノードhttp.get(options、callback)APIの中心にあると思われるエラーが返されます。ノードまたは任意のモジュールがJSONP戻り値からJSONオブジェクトを返すことはできますか?ノードJSONPを返す安らかな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);
}
})
}
は、そのようにようにそれを使用します。vm
JavaScript code can be compiled and run immediately or compiled, saved, and run later
でコールバックを実行し
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
前の回答は、コールバック関数をストライピング示唆しています。残念ながら、これは多くのjsonpレスポンスと互換性がありません。なぜなら、関数の内容は通常は純粋なJSONではなくオブジェクトであるからです。 JSON.parse()関数は、次のようなもののために死ぬだろう:
callback({key:"value"});
を上記有効なオブジェクトですが、それが有効なJSONではありません。
以下は、コールバックを実行し、オブジェクトを返します。
jsonpSandbox = vm.createContext({callback: function(r){return r;}});
myObject = vm.runInContext(jsonpData,jsonpSandbox);
JSONP応答で返されるコールバック関数の名前にコンテキスト変更callback
を作成するとき。
+2
briliantは完璧に動作します。 –
関連する問題
- 1. HTTPSからHTTP JSONPリクエスト
- 2. Angular2 Http/Jsonpリクエストを作成しない
- 3. ノードHTTPリクエストから外部APIへのポート番号を削除
- 4. 安らかなAPI - 後続のPOSTリクエストにクッキーを渡す
- 5. HTTP GETリクエスト(ノード)が返される501
- 6. JerseyからJSONPを返す
- 7. WCPリクエストからJsonPを返す方法は?
- 8. 安全なノード、js APIルート
- 9. Microsoft Graph APIリクエストからのHTTP 429
- 10. ノードjsの$ httpリクエスト - 成功の値を返す方法$ http.post
- 11. 安心なAPIのためのnginx.conf
- 12. 安全なJSONPリクエストを作成することはできますか?
- 13. ノードhttpリクエストのデータチャンクのタイプ
- 14. リクエストから模擬データをノードのTwitter Streaming APIに返すには
- 15. マルチパート/フォームデータ安らかなリクエスト
- 16. HTTP応答リクエストを返すHTTP GETリクエスト
- 17. ノードでのproxy HTTPリクエスト
- 18. jQueryを使用したajax/jsonpリクエストからのhtmlの出力
- 19. ステートレスBeanからHTTPリクエストを作成するためのベストプラクティス
- 20. ノードjsシリアルhttpリクエスト
- 21. JSONP GETリクエストから返されたデータにアクセスする方法は?
- 22. HTTPサーバーからアプリケーションへのHTTP RESTful APIリクエストの転送
- 23. VIrusTotal APIのためのCでのフレーズHTTPリクエスト
- 24. ノード - 単純なxml APIリクエスト
- 25. AndroidスタジオGitHub APIリクエストからの返品
- 26. iPhoneからサーバーへの安全なリクエスト
- 27. ノードAPIリクエスト
- 28. PHP HTTP/1.0 400 APIからの不正なリクエスト認証ヘッダーでのリクエスト
- 29. 角CORS/JSONPとGoogle Maps HTTP APIコール
- 30. アクティブなCollab 5 API - HTTPリクエスト
あなたはコードを欲しいですか?私は、URLにコールバックの参照がないことに気づいた。通常これは&callback = fooまたは&jsonp = barのように見えます。 LinkedInがコールバックに応答するようです。 url.parseを使用してそのパラメータを見つけ、それに応じて動作させることができます。 – booyaa
request = require( 'request'); (myObject = eval( '(+ body +' body + 'body +' body +) ');}}}} )  ); }; – user690740
リンクされたコールバックパラメータ(&callback = functionName)を使用すると、任意の名前にラッパー関数を変更できます。私は幸せな人になるでしょう。 – user690740