在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);
});
答案 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)
});