node.js url,方括号

时间:2014-05-27 23:49:27

标签: javascript node.js express

在express.js中,我正在尝试为网址 / xxx / xxx / items [5] 添加路由器。 网址有Square Bracket。

路由器在没有方形支架的情况下工作正常,但使用方形支架失败。

如果有的话,有没有人面对这个问题,是什么方法让它发挥作用。

var buildingDeviceCount = require("../models/buildingDeviceCount");
/* api/analytics/v1/deviceCount/Building[5]/today?areas=&yAxis=absoluteDevices&timeRange=00:00-23:59 */
router.get('/api/analytics/v1/deviceCount/Building[5]/today', function(req, res) {
res.json(buildingDeviceCount.buildingDeviceCount);
});

2 个答案:

答案 0 :(得分:1)

方括号[]字符导致混乱的原因是它们代表正则表达式中的基本character class。此外,express.js允许使用正则表达式定义其路由。因此,当您说:/xxx/xxx/items[5]它尝试将给定的网址与/xxx/xxx/items5

匹配时,您实际上是在告诉您快速回复的内容

要解决此问题,请按以下方式定义您的路线:

app.get(/^\/api\/analytics\/v1\/deviceCount\/Building\[\d+\]\/today/, function(req, res) {...});

修改

我刚发现express允许参数验证。所以你也可以尝试这样的东西......

app.param("building_5", /^Building\[\d+\]$/);
app.get("/api/analytics/v1/deviceCount/:building_5/today", function(req, res) {...});

答案 1 :(得分:1)

当您将字符串传递给JS中的正则表达式函数时,您需要在开始括号之前转义反斜杠,如此

router.get('/api/analytics/v1/deviceCount/Building\\[5\]/today', function(req, res) {

相关: How can I put [] (square brackets) in RegExp javascript?

另外,使用它来获取括号中的数字

app.get('/api/analytics/v1/deviceCount/Building\\[:n\]/today', function(req, res) {
    res.send(req.params.n)
});