当 Fastify 2 是主要版本时,这个问题得到了解答。这个答案对于 Fastify 3 可能不正确
虽然 Fastify 与 Express/Restify 方法签名兼容,但传入的值并不完全相同。方法签名是:
/**
* Generic middleware method
* @param {http.IncomingMessage} req
* @param {http.ServerResponse} res
*/
const middleware = (req, res) => {
}
fastify.use(middleware)
在使用 时.use
,Fastify只处理
不提供or字段的Node.js HTTP 类。.params
.query
Express 将这些字段添加为对开发人员的好处。如果您使用的中间件依赖于这些功能,不幸的是,它不会直接加入。
一切都没有丢失
如果你选择将中间件迁移到 Fastify,Request
对象上可以使用.params
和.query
字段。
在你的问题中使用中间件,这就是 Fastify 版本的样子。
fastify.addHook('onRequest', function(request, reply, done) {
console.log('query', request.query);
console.log('params', request.params);
done();
})
Fastify 要求开发人员更多地考虑 Hooks,而不是中间件。这提供了更大的灵活性和更快的速度,但有时编写起来会更复杂一些。
补充阅读
Fastify 网站上的Lifecycle和
Hooks文档提供了有关这些部分如何协同工作的更多详细信息。
中间件文档
提供了有关支持哪些功能的更多详细信息。
有点相关,使用插件
,您可以将范围限定到特定路径。
参考
Express 中间件支持
从中间件文档:
此外,Fastify 中间件不支持 Express 和 Restify 添加到 req 和 res 增强版本的方法。
和
Express 大量修改了节点核心 Request 和 Response 对象的原型,因此 Fastify 无法保证完全的中间件兼容性。
快速添加.params
和.query
Express 添加.query
到请求
以及Express 运行查询中间件的位置
快速向路由添加参数。