expression通配符规则

我正在使用Node和Express托pipe单页应用程序。 我使用客户端的静态中间件。 我正在使用pathurl来浏览应用,例如domain.com/profile/134。 我正在使用history.pushState在客户端内部更改页面,这工作正常。 我所缺less的是服务器上的通配符规则,当用户直接访问我的页面到非根的path时,捕获所有可能的path。 如果我试图直接访问domain.com/profile/134,我得到这个:“不能GET / profile / 134”。 我试图在server.js的末尾插入一个通配符,但是每次访问页面根目录的时候都会碰到它。 这是我的相关代码:

var express = require('express'); var app = express(); app.use(express.static(__dirname + '/../client')); app.get('/*', function(req, res) { console.log('wildcard'); }); 

这是正确的GET通配符规则来实现我所需要的,我怎样才能服务这个处理程序内的静态客户端? 之后只要保存了初始path,我的客户端就会find正确的页面。 我基本上希望这个通配符规则的行为与静态规则相同,但保留初始path。

你可以使用黑客

 app.get('/:url', function(req, res) { console.log('wildcard'); }); 

或者试试这个

 app.get('/(.*)', function(req, res) { console.log('wildcard'); }); 

[编辑]:这应该像你期望的那样工作

 var express = require('express'); var app = express(); app.get(/(.*)/, function(req, res) { console.log("req.path", req.path); res.send('success'); }); var server = app.listen(3000, function () { var host = server.address().address; var port = server.address().port; console.log('Example app listening at http://%s:%s', host, port); }); 

我最终使用名为express-history-fallback-api的npm模块来解决这个问题。 开箱即用,解决了简单和高级path,如domain.com/settings和domain.com/profile/username

https://www.npmjs.com/package/express-history-api-fallback