用多个字段表示app.get

app.get('/api/advancedSearch/:id/:page_no/:exact_phrase?/:exclude_words?' ,function (req,res) { //body }); 

我试图创build一个app.get,如上所示,我对第一个几个字段没有问题,问题出现在“exact_phrase”和“exclude words”字段。 这些应该是列表,如果他们都通过,我没有问题得到他们。

造成问题的原因是,有时这些领域中的一个或两个可能不存在,我仍然需要得到它。 我似乎无法为此deviseapp.get。

有没有办法deviseapp.get或发送请求,以便我可以做到这一点?

一般来说,URL的可选部分在查询string中工作得更好,因为它们自己识别哪些是存在的(因为它们是命名参数而不是仅由URL位置标识的)。

快速路由匹配中的URLpath段是特定于顺序的,并且您不能拥有任何可选参数的序列,因为这对于传递的内容并不确定。 快速路由匹配algorithm本身并不像您想要的那样灵活或强大。

你有几个select:

  1. :exact_phrase:exclude_words保留在路由定义中,然后在路由处理程序中执行自己的URLparsing,以查看到底有哪些内容。 这样你可以调整到任何你想要的格式。

  2. 将所有可能具有不同顺序的参数放在URL中,然后使用req.query查看URL中的内容。 查询参数是可选的,并且可以以任何顺序。

最后一个选项是这样的:

 // url: /api/advancedSearch/123/4?exact_phrase=foo&exclude_words=cat,dog app.get('/api/advancedSearch/:id/:page_no/', function(req,res) { var excludeWords = []; if (req.query.exclude_words) { excludeWords = req.query.exclude_words.split(","); } var exactPhrase = req.query.exact_phrase || ""; // do the rest of your processing here }); 

仅供参考,从概念上讲,可选参数应该位于queryString中,而不是核心URLpath中。 由于查询string参数是自我识别的,所以它使得它不明确哪些是存在的,哪些不是。 如果URL中有可选的path段,那么您必须创build某种系统来识别哪个path段存在以及它的含义。 因为这完全是应用程序和上下文特定的,Express无法自动为您做。