节点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); });
- Socket.io连接只在服务器上build立reset(nodejitsu)在本地工作正常吗?
- Passport.js无法序列化用户
- Express.js / Mongoose用户angular色和权限
- 使用围绕对象文字的try catch
- SocketIO-GET http:// localhost:3000 / socket.io /?EIO = 3&transport = polling&t = 1418187395022-0 404(Not Found)
- 这个NodeJS集群主可以崩溃吗?
- 如何用express和EJS正确“包含”一个使用node.js的EJS文件
- Nodejs请求挂起
- 使用SailsJS / Express将请求与对象保存在内存中