试图让中间件在Fastify中工作-我似乎无法访问查询或参数。文档说:
但举一个简单的例子:
fastify.use(function(req, res, next) {
console.log('req.query', req.query); // undefined
console.log('req.params', req.params); // undefined
next();
});
同样,如果我添加/限制网址:
fastify.use('/foo', function(req, res, next) {
我确定我遗漏了一些东西,但是文档确实声称它“有效”-我看不到您是否无法访问qs?
[我认为我可以重写以使用钩子(Hook),但是我真的对使用中间件实现这一目标很感兴趣]
谢谢
最佳答案
当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仅处理Node.js HTTP classes不提供
.params
或.query
字段。Express将这些字段添加为对开发人员的好处。如果您使用的是中间件
依靠这些功能,不幸的是,它不会直接插入。
一切都不会丢失
如果您选择将中间件迁移到Fastify,则
.params
和.query
字段在Request上可用目的。
使用您问题中的中间件,这就是Fastify版本将要使用的中间件
看起来像。
fastify.addHook('onRequest', function(request, reply, done) {
console.log('query', request.query);
console.log('params', request.params);
done();
})
Fastify要求开发人员在 Hook 方面更多地思考,而在中间件方面则少一些。这样可以提供更大的灵活性和更快的速度,但有时编写起来会有些复杂。补充阅读
Lifecycle和
Fastify上的Hooks文档
该站点提供了有关这些部分如何协同工作的更多详细信息。
Middleware documentation
提供有关支持哪些功能的更多详细信息。
使用Plugins有点相关
您可以将范围限定为特定路径。
引用
快速中间件支持
从the Middleware documentation:
和
快速添加
.params
和.query
Express adding .query
to request哪里Express runs the query middleware
Express adding parameters to route。