使用express.js可以从我的根目录外部访问静态文件吗?

时间:2015-03-20 15:02:56

标签: angularjs express

我有一个明确的应用程序,我将用作代理来捕获从Angular编写的应用程序发出的一些请求。 Angular应用程序已经存在,并且具有我不想改变的构建配置。

我想在并行文件树中管理我的Angular和Express应用程序,例如:

Angular app位于以下路径 /src/angularapp/images/img1.gif

/src/expressapp/app.js

我可以从包含Express.js应用程序的并行文件树中访问Angular应用程序内部的静态资源吗?我已经尝试了几次,但发现很难正确配置,所以我想知道是否有什么东西阻止了这一点。

3 个答案:

答案 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')))