Search code examples
arangodbfoxx

Foxx: How not having to define queryParams up front?


I am getting myself up to speed with ArangoDB and Foxx, and so far the experience has been great! I have however one question:

For the Foxx router one can specify queryParams, for instance /graph/nodes?eyes=blue&hair=blond.

What bothers me though is that I am forced (or at least, after several attempts I have such impression) that I have to hard code that I am expecting query params of eyes and hair.

Is this indeed true? And if yes, is there a work around? For me this is a bit strange within the context of nosql and being able to store documents with whatever attributes one wants in a collection.

I'd rather have that I can e.g. fetch the whole part of the URL after ?, do a split("&") on the string and catch whatever was part of the request.

Is there a way to do this within the Foxx framework?

Any help would be greatly appreciated!


Solution

  • I'm not sure why you think you are forced. The only distinction should be that query params specified as queryParam will be validated (if a schema is provided) and documented.

    You should be able to just use req.queryParams to access additional query parameters:

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

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

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

    This assumes you are using ArangoDB 3.0 and not running a Foxx services written for 2.8 in legacy compatibility mode (i.e. you're using things called routers, not things called controllers).