Expressでのレスポンス.jsonとres.endとres.send()
5791 ワード
今日はあるrestful APIに対してテストを行いましたが、同時に性能が悪いことが分かりました。スループット率が非常に悪いです。その結果、res.endの誤用が判明しました。
参考:express公式文書http://www.expressjs.com.cn/4x/api.html#res
express応答には、一般的な3つのAPIが使われています。 ress.send() res.json() res.end() 環境
テスト環境:express 4.1テストツール:mocha+supertest
1 res.send([body])
HTTP応答を送信します。このbodyパラメータは、Bufferオブジェクト、Stringオブジェクト、またはArayであってもよい。
Sample:
1.1パラメータがブザーオブジェクトである場合
この方法は、Content-Typeレスポンスヘッダフィールドを「aplication/octet stream」に設定します。Conteet-Typeを「text/html」に設定するには、下記のコードを使って設定します。
この方法はheaderのContent-Typeを「text/html」に設定する。
ExpressはJSONで応答して、この方法はheaderのContee-Typeを「text/html」として設定します。
sample:
JSON応答を送信します。この方法は、パラメータとしてオブジェクトまたは配列を同じである。つまり、res.json()は、res.send(body)の第三の場合です。同じ「content-type」:「aplication/json」。
しかし、他の値はnullやundefinedなどJSONに変換できます。(これらの技術は無効ですが、JSON)。実際にこの条件をテストする場合のres.bodyはnullです。直接stringを送ります。bodyはstringです。
2.1実際テスト
Sample:
応答プロセスを終了します。この方法は実際にNodeコアから来ています。特にhttp.ServerResonseのreponse.end()方法です。迅速に終了するためには、データの応答がありません。データを使って応答する必要があれば、res.send()やres.json()などの方法を使ってください。
Sample:
レスポンスはJSON応答を送信します。レスポンスはデータを送信します。レスポンスはres.send()を使いますが、header‘content-type’パラメータに注意してください。レスポンスは非常に性能に影響します。
参考:express公式文書http://www.expressjs.com.cn/4x/api.html#res
express応答には、一般的な3つのAPIが使われています。
テスト環境:express 4.1テストツール:mocha+supertest
1 res.send([body])
HTTP応答を送信します。このbodyパラメータは、Bufferオブジェクト、Stringオブジェクト、またはArayであってもよい。
Sample:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('some html
');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
3つの異なるパラメータexpress応答時に異なる挙動1.1パラメータがブザーオブジェクトである場合
この方法は、Content-Typeレスポンスヘッダフィールドを「aplication/octet stream」に設定します。Conteet-Typeを「text/html」に設定するには、下記のコードを使って設定します。
res.set('Content-Type', 'text/html');
res.send(new Buffer('some html'));
1.2パラメータがStringである場合この方法はheaderのContent-Typeを「text/html」に設定する。
res.send('some html');
1.3パラメータがArayorまたはObjectである場合ExpressはJSONで応答して、この方法はheaderのContee-Typeを「text/html」として設定します。
Res.status(500).json({});
res.json([body]) json
1.4実際テストsample:
res.send({hello:"word"});
header: 'content-type': 'application/json'
body:{ hello: 'word' }
res.send(["hello","word"]);
header: 'content-type': 'application/json'
body:[ 'hello', 'word' ]
res.send(helloword);
header: 'text/html; charset=utf-8'body:helldworld
body:helldworld(postman )
res.send(new Buffer('helloworld'));
header:'application/octet-stream'
body:68 65 6c 6c 6f 77 6f 72 6c 64>
2 res.json([body])JSON応答を送信します。この方法は、パラメータとしてオブジェクトまたは配列を同じである。つまり、res.json()は、res.send(body)の第三の場合です。同じ「content-type」:「aplication/json」。
しかし、他の値はnullやundefinedなどJSONに変換できます。(これらの技術は無効ですが、JSON)。実際にこの条件をテストする場合のres.bodyはnullです。直接stringを送ります。bodyはstringです。
2.1実際テスト
Sample:
res.json(null)
res.json({ user: 'tobi' })
res.status(500).json({ error: 'message' })
res.json(["hello","word"]);
header: 'content-type': 'application/json'
body:[ 'hello', 'word' ]
res.json({hello:"word"});
header: 'content-type': 'application/json'
body:{ hello: 'word' }
res.json('helloworld');
header: 'content-type': 'application/json'
body:helloworld
res.json(new buffer('helloworld'));
express
3 res.end([data][,encoding])応答プロセスを終了します。この方法は実際にNodeコアから来ています。特にhttp.ServerResonseのreponse.end()方法です。迅速に終了するためには、データの応答がありません。データを使って応答する必要があれば、res.send()やres.json()などの方法を使ってください。
res.end();
res.status(404).end();
3.1実際テストSample:
res.end('helloworld');
helloworld
postman:helloworld
supertest :
4まとめレスポンスはJSON応答を送信します。レスポンスはデータを送信します。レスポンスはres.send()を使いますが、header‘content-type’パラメータに注意してください。レスポンスは非常に性能に影響します。