从模块内部访问Express mountpath
为了构build一个真正的模块化快速应用程序(可以独立运行或作为另一个应用程序的一部分运行),我需要find从子应用程序内部find安装path的最简洁的方法。 举个简单的例子,假设有两个文件:main.js和subapp.js
main.js
var express = require('express'); var app = express(); var localApp = express(); var subapp = require('./subapp'); app.use('/foo', subapp); app.use('/bar', localApp); console.log(localApp.mountpath); // yes, this prints '/bar' as expected ...
subapp.js
var express = require('express'); var app = express(); var truePath = app.mountpath; // I wish this would point to '/foo', but instead points to '/' ... module.exports = app;
从模块内部findmountpath的最好方法是什么? 我正在这样做,试图解决这个问题: 使用Express以非硬连线的方式访问模板内的mountpathvariables 。
如示例中所示,已尝试使用app.mountpath而没有成功
正如阿尔苏当回答,这实际上是一个执行顺序的问题,但是我认为这是一个干净的方式。 在安装模块后会有一个事件被触发 ,所以你可以这样做:
var truePath = = "/"; app.on('mount', function (parent) { truePath = app.mountpath; });
在现实生活中, truePath可以是app.locals.truePath
,因此可以从视图内部访问它。
呃..这是执行顺序的问题。
在你的subapp.js中, app.mountpath
语句在module.exports = app
之前。
但只有你导出应用程序,然后应用程序被挂载,那么它将被设置为mountpath
属性。
所以,应用程序由外部快递安装后,您应该检索mountpath
。
我的build议是两个:
- 在你的subapp.js中设置装载path。 而外面的快车阅读这个属性。
- 也许你认为1并不是真正的模块化。 所以你可以select定义一个configuration文件。 并且main.js和subapp.js都从config中读取mountpath。
尝试req.baseUrl
:
app.js
var express = require('express'); var app = express(); var foo = require('./foo'); app.use('/foo', foo); app.listen(3000);
foo.js
var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { console.log(req.baseUrl); // '/foo' res.send('foo'); }); module.exports = router;