gpt4 book ai didi

javascript - Fastify 中间件 - 访问查询和参数?

转载 作者:行者123 更新时间:2023-12-03 07:03:18 25 4
gpt4 key购买 nike

试图让中间件在 Fastify 中工作 - 我似乎无法访问查询或参数。文档说:

Fastify supports out of the box Express/Restify/Connect middlewares, this means that you can just drop-in your old code and it will work! (faster, by the way)



但举个简单的例子:
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 要求开发人员更多地考虑 Hooks,而不是中间件。这提供了更大的灵 active 和更快的速度,但有时编写起来会更复杂一些。
补充阅读
Lifecycle
Hooks Fastify 文档
网站提供了有关这些部分如何协同工作的更多详细信息。
Middleware documentation
提供有关支持哪些功能的更多详细信息。
有点相关,使用 Plugins
您可以将范围限定到特定路径。
引用
Express 中间件支持
来自 the Middleware documentation :

Furthermore, methods added by Express and Restify to the enhanced versions ofreq and res are not supported in Fastify middlewares.



Express modifies the prototype of the node core Request and Response objectsheavily so Fastify cannot guarantee full middleware compatibility.


加急加 .params.query Express adding .query to request
在哪里 Express runs the query middleware
Express adding parameters to route .

关于javascript - Fastify 中间件 - 访问查询和参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com