我用角度2表示js。所以对于所有的请求,不是css,图像,js,视频,我发送index.html文件。我的路由器代码:
router.get(/\/(?!((.*\.html$)|(.*\.css$)|(.*\.mp4)|(.*\.woff)|(.*\.js$)|(.*\.map$)|(.*\.jpg$)|(.*\.jpeg$)|(.*\.png$)|(.*\.gif$))).+$/gmi,
ensureConnect.ensureLoggedIn({ redirectTo: '/' }),
function(req, res) {
res
.set('Content-Type', 'text/html')
.sendFile(../dist/index.html);
});对于根路由器'/‘,它工作得很好,但是如果我尝试打开另一个页面(例如’/product 0596157134‘),它有时会打开页面,但有时会返回404 (无法获得/product/am-0596157134)
所以我试着重新加载页面两次,对于第一次重新加载,它返回404,对于第二次,它返回200。这是日志:
*ffff:127.0.0.1-10/11/11/2016:11:46:24 +0000 "GET /product/am-0596157134 HTTP/1.1“404 - "Mozilla/5.0 (Macintosh;Intel 10_12_0) AppleWebKit/537.36 (KHTML,类似壁虎) Chrome/54.0.2840.71 Safari/537.36” *ffff:127.0.0.1-10/11/11/2016:11:46:25 +0000 "GET /product/0596157134 HTTP/1.1“2002299 "Mozilla/5.0 (Macintosh;Intel 10_12_0) AppleWebKit/537.36 (KHTML,类似壁虎) Chrome/54.0.2840.71 Safari/537.36”
知道为什么会发生这种情况,以及如何解决吗?
发布于 2016-11-10 13:08:43
TL;DR:从正则表达式中移除g标志。
使用/g时,正则表达式保持内部状态(存储在lastIndex属性中),以便能够找到连续的匹配。
在您的示例中,在请求之间保持此状态,因此对于第一个请求执行匹配,更新最后一个索引,当一个新请求出现时,匹配从最后一个索引开始。当它不匹配(而且可能不匹配)时,它重置的状态和一个新请求将再次匹配。
https://stackoverflow.com/questions/40527827
复制相似问题