记录 Fastify 响应正文

cyb*_*bat 5 node.js fastify

如何在 Fastify 中记录响应正文?主体似乎没有作为响应对象的一部分公开:

const fastify = require('fastify')({
  logger: {
    serializers: {
      res: function (res) { 
        // No body in req afaik
        return {  } 
      }
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

dol*_*s3m 8

尝试这个:

const fastify = require('fastify')({
  logger: {
    serializers: {
      res: function (res) {
        return {
          statusCode: res.statusCode,
          payload: res.payload,
        }
      },
    }
  }
})

fastify.addHook('onSend', function (_request, reply, payload, next) {
  Object.assign(reply.res, { payload });
  next();
})
Run Code Online (Sandbox Code Playgroud)

如果您的某些有效负载是对象,并且您希望在它们被序列化之前将它们序列化(好吧,序列化),您preSerialization也可以添加钩子:

fastify
  .addHook('preSerialization', (_request, reply, payload, next) => {
    Object.assign(reply.res, { payload });
    next();
  })
  .addHook('onSend', (_request, reply, payload, next) => {
    if (!reply.res.payload) Object.assign(reply.res, { payload });
    next();
  });
Run Code Online (Sandbox Code Playgroud)