私はexpress.js
の初心者であり、res.send
とres.write
の違いを理解しようとしていますか?
res.send
実用的な説明
res.send
はres.write
+ res.end()
と同等であるため、一度しか呼び出すことができません例
app.get('/user/:id', function (req, res) {
res.send('OK');
});
詳細については expressjs.com/en/api.html
res.write
例
response.write('<html>');
response.write('<body>');
response.write('<h1>Hello, World!</h1>');
response.write('</body>');
response.write('</html>');
response.end();
res.send
はres.write + res.end
と同等です。そのため、重要な違いはres.send
が複数回呼び出され、その後にres.write
が続くのに対して、res.end
は1回しか呼び出せません。
ただし、res.send
はExpressの一部です。応答ヘッダーの長さを自動的に検出できます。ただし、res.send()でメモリスパイクが発生する可能性があります。大きなファイルの場合、アプリケーションはその間にハングアップします。
最も重要な違いの1つどの回答にも「排水」と示されていない。
res.write
はtrueまたはfalseを返す場合があります。ドキュメントの時点で:
データ全体がカーネルバッファに正常にフラッシュされた場合、trueを返します。データの全部または一部がユーザーメモリのキューにある場合、falseを返します。バッファが再び解放されると、「ドレイン」が発行されます。
そのため、res.write
を実行する場合、res.write
がfalseを返した場合、ドレインイベントが発生するまで呼び出し元は書き込みを保留する必要があります。
これらはすべてres.send
で自動的に処理されます。トレードオフは、後者を使用するときに行う必要があるバッファリングです。