node-restifyの出力JSONをより適切に(つまり、改行とインデントを使用して)作成する適切な方法は何ですか?
基本的には、同じように出力したいのですJSON.stringify(object, null, 2)
が、それを行うようにrestifyを構成する方法がわかりません。
Restifyにパッチを適用せずにそれを達成するための最良の方法は何ですか?
node-restifyの出力JSONをより適切に(つまり、改行とインデントを使用して)作成する適切な方法は何ですか?
基本的には、同じように出力したいのですJSON.stringify(object, null, 2)
が、それを行うようにrestifyを構成する方法がわかりません。
Restifyにパッチを適用せずにそれを達成するための最良の方法は何ですか?
formatters
これは、 (コンテンツネゴシエーションを参照)を使用して実現できるはずです。次の場合にカスタムを指定するだけですapplication/json
。
var server = restify.createServer({
formatters: {
'application/json': myCustomFormatJSON
}
});
元のフォーマッタのわずかに変更されたバージョンを使用できます。
function myCustomFormatJSON(req, res, body) {
if (!body) {
if (res.getHeader('Content-Length') === undefined &&
res.contentLength === undefined) {
res.setHeader('Content-Length', 0);
}
return null;
}
if (body instanceof Error) {
// snoop for RestError or HttpError, but don't rely on instanceof
if ((body.restCode || body.httpCode) && body.body) {
body = body.body;
} else {
body = {
message: body.message
};
}
}
if (Buffer.isBuffer(body))
body = body.toString('base64');
var data = JSON.stringify(body, null, 2);
if (res.getHeader('Content-Length') === undefined &&
res.contentLength === undefined) {
res.setHeader('Content-Length', Buffer.byteLength(data));
}
return data;
}
これはさらに優れたソリューションであり、コードは単純で、プログラムの実行をチェックする際にエラーが発生することはなく、問題はないようです。
https://github.com/restify/node-restify/issues/1042#issuecomment-201542689
var server = restify.createServer({
formatters: {
'application/json': function(req, res, body, cb) {
return cb(null, JSON.stringify(body, null, '\t'));
}
}
});