当通配符匹配时,Node express GET路由会失败其他所有请求

时间:2015-02-28 21:49:27

标签: javascript regex node.js express

我有一个路由器设置来接受任何与单词" API"不匹配的GET请求。在里面。这适用于我的单页应用,因此任何带有书签的网址我的javascript都无法使用其路由。

问题是我每隔一次用一个测试网址刷新页面就失败了。

网址:http://localhost:3000/my-test-url

首次点击网址时,我的索引页面会加载。

第二次刷新页面时出错。

无法GET / my-test-url

第三次点击刷新它有效,第四次失败,依此类推。

app.engine('html', cons.underscore);
app.set('view engine', 'html');
app.set('views', path.resolve(__dirname, '../client'));

// serve static content for the app from the "client" directory in the     application directory
//express.static(path.join(__dirname, '../client')))
app.get(/^(?!.*\bapi\b).*$/ig, function(req, res) {
    res.render('index');
});

app.listen(app.get('port'), function() {
    console.log('Server up: http://localhost:' + app.get('port'));
});

第一次运行后,是否存在让请求保持打开的内容?浏览器中的网络选项卡每次都显示相同的URL,但与404错误交替显示。任何建议都表示赞赏。

更新,似乎有一个问题可能不是正则表达式,但路由器每次如何解释它。当我设置这样的路线时:

app.get('*', function(req, res) {
    console.log(req.route);
    res.render('index');
});

正如我所料,它似乎每次都有效。

1 个答案:

答案 0 :(得分:3)

问题似乎是g标志。如果您只是使用/^(?!.*\bapi\b).*$/i,问题应该消失。

但我实际上不知道这种行为是否是一个错误或为什么会发生。