(error, reply, cb)
| 83 | } |
| 84 | |
| 85 | function fallbackErrorHandler (error, reply, cb) { |
| 86 | const res = reply.raw |
| 87 | const statusCode = reply.statusCode |
| 88 | reply[kReplyHeaders]['content-type'] = reply[kReplyHeaders]['content-type'] ?? 'application/json; charset=utf-8' |
| 89 | let payload |
| 90 | try { |
| 91 | const serializerFn = getSchemaSerializer(reply[kRouteContext], statusCode, reply[kReplyHeaders]['content-type']) |
| 92 | if (serializerFn === false) { |
| 93 | payload = serializeError({ |
| 94 | error: statusCodes[statusCode + ''], |
| 95 | code: error.code, |
| 96 | message: error.message, |
| 97 | statusCode |
| 98 | }) |
| 99 | } else { |
| 100 | payload = serializerFn(Object.create(error, { |
| 101 | error: { value: statusCodes[statusCode + ''] }, |
| 102 | message: { value: error.message }, |
| 103 | statusCode: { value: statusCode } |
| 104 | })) |
| 105 | } |
| 106 | } catch (err) { |
| 107 | // error is always FST_ERR_SCH_SERIALIZATION_BUILD |
| 108 | // because this is called from route/compileSchemasForSerialization |
| 109 | reply.server[kLogController].serializerError(err, reply.request, reply, { statusCode: res.statusCode }) |
| 110 | |
| 111 | reply.code(500) |
| 112 | payload = serializeError(new FST_ERR_FAILED_ERROR_SERIALIZATION(err.message, error.message)) |
| 113 | } |
| 114 | |
| 115 | if (typeof payload !== 'string' && !Buffer.isBuffer(payload)) { |
| 116 | payload = serializeError(new FST_ERR_REP_INVALID_PAYLOAD_TYPE(typeof payload)) |
| 117 | } |
| 118 | |
| 119 | reply[kReplyHeaders]['content-length'] = '' + Buffer.byteLength(payload) |
| 120 | |
| 121 | cb(reply, payload) |
| 122 | } |
| 123 | |
| 124 | function buildErrorHandler (parent = rootErrorHandler, func) { |
| 125 | if (!func) { |
no test coverage detected