如何访问 Fastify 请求的原始主体?
How do I access the raw body of a Fastify request?
如你所想,我对 Express 很熟悉,但这是我第一次使用 Fastify。
我想访问 Fastify 请求的 unmodified 正文,以对 webhook 进行签名验证 - 即,我想在收到请求时查看它,未被任何中间件修改。在 Express 中,这通常是通过访问 request.rawBody
来完成的。
如何访问 Fastify 请求的原始主体?
有个issue on GitHub for rawBody support
还有一个模块:"raw-body"。在 Fastify 中使用这个模块:
const rawBody = require('raw-body')
fastify.addContentTypeParser('*', (req, done) => {
rawBody(req, {
length: req.headers['content-length'],
limit: '1mb',
encoding: 'utf8', // Remove if you want a buffer
}, (err, body) => {
if (err) return done(err)
done(null, parse(body))
})
})
希望对你有所帮助,我也是 fastify 的新手
注意:Fastify 请求只能有req.body——他们不能有,例如,req.body 和 req.rawBody 与其他 Web 服务器(例如,Express)一样。这是因为 addContentTypeParser()
仅 returns 修改了 body
,它不能向请求添加任何其他内容。
相反,在内容类型解析器中,我们仅添加到一个路由,我们制作:
req.body.parsed
(对象,与通常在 req.body 中的内容相同)
req.body.raw
(字符串)
有关更多信息,请参阅 GitHub and the addContentTypeParser() 文档。
server.addContentTypeParser(
"application/json",
{ parseAs: "string" },
function (req, body, done) {
try {
var newBody = {
raw: body,
parsed: JSON.parse(body),
};
done(null, newBody);
} catch (error) {
error.statusCode = 400;
done(error, undefined);
}
}
);
如你所想,我对 Express 很熟悉,但这是我第一次使用 Fastify。
我想访问 Fastify 请求的 unmodified 正文,以对 webhook 进行签名验证 - 即,我想在收到请求时查看它,未被任何中间件修改。在 Express 中,这通常是通过访问 request.rawBody
来完成的。
如何访问 Fastify 请求的原始主体?
有个issue on GitHub for rawBody support
还有一个模块:"raw-body"。在 Fastify 中使用这个模块:
const rawBody = require('raw-body')
fastify.addContentTypeParser('*', (req, done) => {
rawBody(req, {
length: req.headers['content-length'],
limit: '1mb',
encoding: 'utf8', // Remove if you want a buffer
}, (err, body) => {
if (err) return done(err)
done(null, parse(body))
})
})
希望对你有所帮助,我也是 fastify 的新手
注意:Fastify 请求只能有req.body——他们不能有,例如,req.body 和 req.rawBody 与其他 Web 服务器(例如,Express)一样。这是因为 addContentTypeParser()
仅 returns 修改了 body
,它不能向请求添加任何其他内容。
相反,在内容类型解析器中,我们仅添加到一个路由,我们制作:
req.body.parsed
(对象,与通常在 req.body 中的内容相同)req.body.raw
(字符串)
有关更多信息,请参阅 GitHub and the addContentTypeParser() 文档。
server.addContentTypeParser(
"application/json",
{ parseAs: "string" },
function (req, body, done) {
try {
var newBody = {
raw: body,
parsed: JSON.parse(body),
};
done(null, newBody);
} catch (error) {
error.statusCode = 400;
done(error, undefined);
}
}
);