我有一个明确的应用程序,我将用作代理来捕获从Angular编写的应用程序发出的一些请求。 Angular应用程序已经存在,并且具有我不想改变的构建配置。
我想在并行文件树中管理我的Angular和Express应用程序,例如:
Angular app位于以下路径 /src/angularapp/images/img1.gif
/src/expressapp/app.js
我可以从包含Express.js应用程序的并行文件树中访问Angular应用程序内部的静态资源吗?我已经尝试了几次,但发现很难正确配置,所以我想知道是否有什么东西阻止了这一点。
答案 0 :(得分:8)
我发布了这个是因为我正在寻找答案而无法找到答案。从表面上看,这一定是可能的,但我在配置它时遇到了很多困难。
最后,我发现以下工作正常,但非常微妙的语法差异导致事情无法按预期工作。
在快速根目录中拥有静态目录的简单模型很容易
app.use (express.static( './public'));
假设我的静态图像位于
/root/expressapp/public/images
我可以使用http://localhost/images/image.png
检索图像您还会看到表单
app.use ( express.static(__dirname + '/public'));
这将为完全限定的路径交换第一个示例的相对路径。
假设我想从角度应用程序中的并行目录中检索图像。在这种情况下,相对路径按我的预期进行
app.use( express.static('../angularapp/images'));
现在我可以在角度应用中访问图像
http://localhost/image1.gif
我也可以在并行树中对目录进行别名
app.use ('/fbsite', express.static( '../angularapp/images'));
并使用
进行访问http://localhost/angularsite/image1.gif
我也可以使用完全限定的路径,但是如果你想这样做,你需要在路径中添加一个前导斜杠,因为__dirname没有尾部斜杠
app.use('/angularimages', express.static( __dirname + '/../angularapp/images'));
使用
访问它http://localhost/angularimages/image1.gif
需要仔细关注路径构建,但通过一些练习,您可以组织对资源的访问,而无需在单个文件树中同时构建快速应用程序和前端代码。这有时可以简化重构构建的重构并增强解决方案的模块化。
在我的情况下,我预计会从Angular-js前端演变为涉及React.js的前端,并且这种并行文件树的方法可以增强重构,因为它隔离了系统每个子部分中复杂的构建依赖关系。
答案 1 :(得分:1)
如果公用文件夹位于应用程序的根文件夹中,请使用app.use('/static', express.static(path.join(__dirname, 'public')));
如果公用文件夹位于应用程序的根文件夹之外,请使用app.use('/static', express.static(path.join(__dirname, '../public')));
答案 2 :(得分:0)
我必须使用path.join()
才能使其正常运行。以你的例子:
app.use(express.static(path.join(__dirname, '/../angularapp/images')))