[Node]Expressのres.send()とres.json()
14825 ワード
ユーザーのHTTPリクエストに答える際に、res.send()とres.json()の違いは何ですか?
app.get('/test', (req, res) => {
// do something...
})
res.send()
res.send()メソッドを使用すると、パラメータで送信されたデータ型に基づいてコンテンツタイプを指定できます.コンテンツタイプを別途指定する必要はありません.
e.g. Buffer, String, an Object and an Array
// res.send(Buffer.from('wahoo'));
// res.send({ some: 'json' });
// res.send('<p>some html</p>');
stringタイプを例とすると、実際のexpressライブラリの内部コードはContent-Typeを指定します.res.send = function send(body) {
var chunk = body;
var encoding;
var req = this.req;
var type;
// 생략...
switch (typeof chunk) {
// string defaulting to html
case 'string':
if (!this.get('Content-Type')) {
this.type('html');
}
break;
case 'boolean':
case 'number':
case 'object':
if (chunk === null) {
chunk = '';
} else if (Buffer.isBuffer(chunk)) {
if (!this.get('Content-Type')) {
this.type('bin');
}
} else {
return this.json(chunk);
}
break;
}
if (typeof chunk === 'string') {
encoding = 'utf8';
type = this.get('Content-Type');
// reflect this in content-type
if (typeof type === 'string') {
this.set('Content-Type', setCharset(type, 'utf-8'));
}
}
return this;
};
res.json()
expressライブラリの内部コードから見ると、res.json()メソッドは最後にres.send()を呼び出す.
したがって,json形式でデータを送信する場合は,意図を示すjson()メソッドを用いることが望ましいと考えられる.
(スペースなどの他のオプションも指定できます.)
res.json = function json(obj) {
var val = obj;
// allow status / body
if (arguments.length === 2) {
// res.json(body, status) backwards compat
if (typeof arguments[1] === 'number') {
deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');
this.statusCode = arguments[1];
} else {
deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');
this.statusCode = arguments[0];
val = arguments[1];
}
}
// settings
var app = this.app;
var escape = app.get('json escape')
var replacer = app.get('json replacer');
var spaces = app.get('json spaces');
var body = stringify(val, replacer, spaces, escape)
// content-type
if (!this.get('Content-Type')) {
this.set('Content-Type', 'application/json');
}
return this.send(body);
};
Reference
Reference
この問題について([Node]Expressのres.send()とres.json()), 我々は、より多くの情報をここで見つけました https://velog.io/@jiseong/Express의-res.send-와-res.jsonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol