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

问题描述 投票:3回答:3

我有一个express应用,我打算把它作为一个代理来使用,以捕获一些由Angular编写的应用发出的请求。Angular应用已经存在,并且有一个我不想改变的构建配置。

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

Angular应用的路径如下rcangularappagesimimg1.gif。

srcexpressappapp.js,我可以从包含Express.js应用的并行文件树中访问Angular应用内部的静态资源吗?

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

angularjs express
3个回答
11
投票

我之所以发这个帖子,是因为我一直在寻找答案,却没有找到。从表面上看,这肯定是可以的,但我在正确配置方面遇到了不少困难。

最后,我发现下面的工作很好,但相当细微的语法差异导致事情没有达到预期的效果。

在快递根目录内有一个静态目录的简单模式很简单。

app.use (express.static( './public'));

假设我的静态图像在

/root/expressapp/public/images 

我可以通过以下方式检索图像 http:/localhostimagesimage.png。

你也可以看到这样的形式

app.use ( express.static(__dirname + '/public'));

这就把第一个例子中的相对路径换成了一个完全限定的路径。

假设我想从angular应用中的平行目录中获取一个图片。在这种情况下,一个相对路径就像我所期望的一样

app.use( express.static('../angularapp/images')); 

现在,我可以在Angular应用中访问图片为

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

需要仔细注意路径构造,但只要稍加练习,你就可以组织对资源的访问,而不需要在一个文件树中同时编译express应用和前端代码。这有时可以简化复杂构建的重构,并增强解决方案的模块化。

在我的案例中,我预计将从Angular-js前端进化到涉及React.js的前端,这种并行文件树的方法可以增强重构,因为它可以隔离系统中每个子部分的复杂构建依赖关系。


1
投票

我不得不使用 path.join() 以使其发挥作用。对于你的例子。

app.use(express.static(path.join(__dirname, '/../angularapp/images')))

1
投票

如果公共文件夹存在于应用程序的根文件夹内,那么使用 app.use('/static', express.static(path.join(__dirname, 'public')));如果公共文件夹存在于应用程序的根文件夹之外,则使用 app.use('/static', express.static(path.join(__dirname, '../public')));

© www.soinside.com 2019 - 2024. All rights reserved.