問題タブ [node-request]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - ファイルのストリーミング/パイピング中にメモリ不足が原因で NodeJS が強制終了されることがある
問題
リクエストモジュールを備えたNodeJSサーバーがあります。ファイルを提供するためにリクエスト を使用pipe()
します。
時々、アプリが例外をスローし、すべてのダウンロードがキャンセルされ、アプリを再起動する必要があります:
メモリ不足: プロセス 9342 (nodejs) スコア 793 を強制終了するか、子を犠牲にし
ます プロセス 9342 (nodejs) を強制終了します
サーバーが予期せず終了したときに (childprocess と fork を使用して) 自動的に再起動する別のスクリプトを作成しましたが、このエラーがスローされることがあります。
致命的なエラー: CALL_AND_RETRY_2 割り当てに失敗しました - プロセスがメモリ不足です
サーバー データ
RAM: 500MB (これは多くないことはわかっていますが、安価です)
Ubuntu 12.04.5 LTS
NodeJS バージョン: v0.10.36
仮定
- 並行ダウンロードが多すぎる
- RAMに関連するパイプに問題があります
1について:
誰かが大きなファイルをダウンロードすると、その一部がRAMにロードされます(これについては何も知りません。一度に20MBと言います。間違っている場合は修正してください)。400MB が利用可能で、同じダウンロード速度で 20 の現在のダウンロードがある場合、RAM に一度に 400MB 以上をロードできないため、サーバーがクラッシュします。
2 について:
さらにpipe()
、次のコードを使用して、現在のダウンロードとキャンセルされたダウンロードを追跡します。
が正しく閉じず、pipe()
使用していた RAM がクリアされません。
質問
私の仮定のいずれかが正しい場合、どうすればそれを修正できますか? そうでない場合、原因はどこにあるのでしょうか(NodeJS/リクエストモジュール/コードが間違っているか悪いか、より良い方法はありますか)?
完全なコード
node.js - GET リクエストを発行し、ノード Stream を取得します
リクエストformData
を使用して取得した画像からのストリームとして送信しようとしています
問題は、リクエストの後にリクエストが発火することformData
です。画像リクエストをパイプして認識する方法はありますか? formData
しかし、 ?にパラメーターを自由に追加できます。
例えば:
発射方法:
request('http://visual-recognition-demo.mybluemix.net/images/horses.jpg')
そのため、応答を使用できますreq
更新: http://visual-recognition-demo.mybluemix.net/images/horses.jpg応答Content-Length
でヘッダーが欠落しているようで、
取得するのは
Transfer-Encoding: chunked
詳細はこちら
javascript - nodejsリクエストモジュールでundefinedを返すジオコーディング機能
基本的に私はこのコードを持っています。リクエストの結果をコールバックで変数に保存し、プログラムの別の部分に戻すことができます。
console.log(geocodeLoc('Hoxton')) の結果は、console.log(result) が実行される前に返されます。
本当にイライラするのは、 console.log(result) の結果がまさに私が望むものであることです。
これがプログラムの出力です
私が欲しいのは、 geocodeLoc が結果を返すことだけです。私はNodeJSに慣れていないので、助けていただければ幸いです
node.js - Node.js はグローバル変数のコピーをローカル スコープ内に保持します
リクエスト ライブラリを使用して多数の URL を取得する Node.js アプリケーションがあります。コードは次のようなものです。
簡単にするために、docs
[URL1、URL2、URL3、...] のような URL が含まれているとします。最初の反復では、URL = URL1 であり、要求はその URL に送信されます。2 回目の反復では、リクエストが URL2 に送信され、以降も同様です。ただし、ループの最後では、URL = URLn になります。イベント完了関数内で、URL をログに記録すると、常に URLn が取得されます。ただし、[URL1、URL2、URL3、...] であるそれぞれの URL を取得できる必要があります。
グローバルURLが変更されたときに変更されないイベントを維持する方法、URLのローカルコピーを維持する方法はありますか?
これは簡単なことのはずですが、わかりません。
javascript - request モジュールを含むファイルをダウンロードし、結果を meteor および node.js の response に渡します
ディスクに保存せずにファイルをダウンロードし、ファイルの内容を応答に渡したい。本当に私はファイルをストリームとして取得し、それを応答に渡し、クライアントがファイルをダウンロードできるようにしたいと考えています。たとえば、以下の疑似コード ( iron-router、meteor、request を使用):
これを行う方法?
ディスクにダウンロードせずにファイルをオンザフライで応答するための実際のソリューションは何ですか?
node.js - アップロードされたファイルを HTTP リクエストにストリーミングする
私の目標は、アップロードされたファイルを受け入れ、Wistia Upload APIを使用してWistiaにストリーミングすることです。HTTP リクエストにフィールドを追加できるようにする必要がありますが、ファイルがディスクにアクセスすることは望ましくありません。Node、Express、Request、およびBusboyを使用しています。
以下のコードには 2 つのconsole.log
ステートメントがあります。最初の戻り値[Error: not implemented]
と 2 番目の戻り値[Error: form-data: not implemented]
。Node でのストリーミングは初めてなので、おそらく根本的に間違ったことをしているのでしょう。どんな助けでも大歓迎です。