3

node-restifyの出力JSONをより適切に(つまり、改行とインデントを使用して)作成する適切な方法は何ですか?

基本的には、同じように出力したいのですJSON.stringify(object, null, 2)が、それを行うようにrestifyを構成する方法がわかりません。

Restifyにパッチを適用せずにそれを達成するための最良の方法は何ですか?

4

2 に答える 2

8

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;
}
于 2012-06-12T20:29:35.073 に答える
0

これはさらに優れたソリューションであり、コードは単純で、プログラムの実行をチェックする際にエラーが発生することはなく、問題はないようです。

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'));
        }
    }
});
于 2016-07-06T22:13:15.640 に答える