Foxx:如何不必预先定义 queryParams?

Foxx: How not having to define queryParams up front?

我正在加快 ArangoDB 和 Foxx 的速度,到目前为止,体验非常好!但是我有一个问题:

对于 Foxx 路由器,可以指定 queryParams,例如 /graph/nodes?eyes=blue&hair=blond

但是让我困扰的是我被迫(或者至少,在几次尝试之后我有这样的印象)我必须硬编码我期待 eyes 和 [=12= 的查询参数].

这是真的吗?如果是,是否有解决方法?对我来说,这在 nosql 的上下文中有点奇怪,并且能够在集合中存储具有任何想要的属性的文档。

我宁愿我可以,例如在 ? 之后获取 URL 的整个部分,对字符串执行 split("&") 并捕获请求的任何部分。

有没有办法在 Foxx 框架内做到这一点?

如有任何帮助,我们将不胜感激!

好的,我通过使用 var query_params = req.originalUrl.split("?")[1]; 设法自己找到了解决方案。然后我用原始查询参数得到我想要的字符串。来自手册:

originalUrl: string

Root-relative URL of the request, i.e. path followed by the raw query parameters, if any.

我不确定你为什么认为自己是被迫的。唯一的区别应该是指定为 queryParam 的查询参数将被验证(如果提供了模式)和记录。

您应该可以只使用 req.queryParams 访问其他查询参数:

router.get(function (req, res) {
  res.json(req.queryParams);
})
.queryParam('documented', joi.number().optional());

GET /?documented=23 -> {"documented": 23}

GET /?more=42 -> {"more": "42"}

这假设您使用的是 ArangoDB 3.0,而不是 运行 在旧版兼容模式下为 2.8 编写的 Foxx 服务(即您使用的是路由器,而不是控制器)。