是否有一种干净的,推荐的方式从模板内部访问mountpath,因此一个快速应用程序可以独立运行,也可以作为另一个应用程序的一部分运行(通过app.use),路径指向正确的目的地?
类似的东西:
{{mountpath}}route/to/file
因此,如果应用程序是独立运行的,则mountpath将为/
,如果作为子模块运行,则mountpath可以是/foo/
注意:我正在使用把手。
答案 0 :(得分:0)
express.static中间件负责提供Express应用程序的静态资产。 工作原理:
从应用程序目录中的“public”目录提供应用程序的静态内容
// GET /style.css等
app.use(express.static(__ dirname +'/ public'));
将中间件安装在“/ static”以仅在其请求路径以“/ static”为前缀时提供静态内容
// GET /static/style.css等。
app.use('/ static',express.static(__ dirname +'/ public'));
从多个目录提供静态文件,但优先于“./public”而不是其他目录
app.use(express.static(__ dirname +'/ public'));
app.use(express.static(__ dirname +'/ files'));
app.use(express.static(__ dirname +'/ uploads'));
在你的情况下你可以使用第二种情况,即;在'/ static'路径上挂载文件,因此可以使用 src ='/ static / filename.xyz'访问公共文件夹下的任何文件
使用子文件夹css,js,images创建文件夹名称public
或者,如果您希望将css安装在路径/css
上,那么您可以:
app.use('/css',express.static(path.join(__dirname, 'module1/css')));
现在,您可以将整个应用程序中的所有css文件用作:
<link href="css/style.css" rel="stylesheet">
答案 1 :(得分:0)
有一个event that is fired after the module is mounted,所以我可以这样做:
app.locals.modulePath = "/";
app.on('mount', function (parent) {
app.locals.modulePath = app.mountpath;
});
可以从所有视图中直接访问本地人,因此可以像{{modulePath}}
答案 2 :(得分:0)
我遇到了同样的问题 - 需要在模板中使用mountpath。
对我有用的解决方案基于2个事实
首先,创建一个单行中间件 - 这将适用于module / subapp
内的所有路由router.use(function (req, res, next) {
res.locals.baseUrl = req.baseUrl;
next();
});
然后在模板中使用#{baseUrl}/some/route
- 请注意这是jade语法,但我认为它与把手的工作原理相同。