节点js表示路由所有path

我正在使用快递。 我喜欢创build一个path,将URLtypes为“get”的所有请求以“/ app / static / * pagePath”作为前缀,导航到“/ assets / app / static / pagePath”。 我正在尝试做以下,但是不起作用。

app.get('/app/static/*path', function (req, res) { res.sendfile('assets/app/static/' + req.params.path); }); 

任何想法?

只要使用带有前缀和一些短路逻辑的中间件:

 app.use('/app/static', function (req, res, next) { if (req.method !== 'get') { next(); return; } res.sendFile(__dirname + '/assets' + req.path); }); 

(这是未经testing,所以可能不会100%准备好,但你明白了)

其实,再看看你的问题,你确定这个不能由express.static中间件只处理正确的根目录来处理?

 app.use('/app/static', express.static(__dirname + '/assets')); 

如果你想包括子目录,你可以使用正则expression式; 这个正则expression式将匹配/app/static/下的任何目录/app/static/

 app.get(/^\/app\/static\/(.*)/, function (req, res) { console.log('assets/app/static/' + req.params[0]); res.sendfile('assets/app/static/' + req.params[0]); }); 

至于你关于多个静态目录的问题,是的,你可以。 只是app.use两个;

 app.use("/static", express.static(__dirname + "/assets")); app.use("/static", express.static(__dirname + "/alternate_assets")); 

该文件将从find它的第一个目录(首先search/assets ,然后/alternate_assets )提供,但是为了减less混淆,您可能希望避免在两个目录中具有相同的文件名。

过去没有其他答案为我工作,因为他们错过了两个小细节:

  • app.use调用定义静态目录应该是asynchronous的(例如包装在一个函数中),或者在websocket完成build立连接之前尝试执行(我认为这是Connect的一个问题 – 框架是Express是build立在最上面的;我应该能够开始写我的代码在文件的顶部)。

  • 这些定义需要发送可以引用该URL的HTML文件(asynchronous)函数体内之前进行。

喜欢这个:

 app.get('/', function (req, res) { app.use('/static', express.static(__dirname + '/static')); res.sendfile(__dirname + '/index.html'); }); 

然后你可以直接在你的HTML(或SVG等)中包含它们,如下所示:

<link rel="stylesheet" href="static/index.css">

<image x="0" y="0" xlink:href="static/picture.svg" />

•等等

GET / app / static / foo / bar / buz —> req.path === / app / static / foo / bar / buz等等:

 app.get('/app/static/:path*', function (req, res) { res.sendfile('assets' + req.path); });