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

Roc*_*den 3 express angularjs

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

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

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

/src/expressapp/app.js

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

Roc*_*den 9

我发布了这个因为我正在寻找答案而找不到答案.从表面上看,这一定是可能的,但我在配置它时遇到了很多困难.

最后,我发现以下工作正常,但非常微妙的语法差异导致事情无法按预期工作.

在快速根中有一个静态目录的简单模型很容易

app.use (express.static( './public'));
Run Code Online (Sandbox Code Playgroud)

假设我的静态图像在

/root/expressapp/public/images 
Run Code Online (Sandbox Code Playgroud)

我可以使用http://localhost/images/image.png检索图像

你也看到了表格

app.use ( express.static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

这将为完全限定的路径交换第一个示例的相对路径.

假设我想从角度应用程序中的并行目录中检索图像.在这种情况下,相对路径就像我预期的那样

app.use( express.static('../angularapp/images')); 
Run Code Online (Sandbox Code Playgroud)

现在我可以在角度应用中访问图像了

http://localhost/image1.gif 
Run Code Online (Sandbox Code Playgroud)

我也可以在并行树中对别目录进行别名

app.use ('/fbsite', express.static( '../angularapp/images'));
Run Code Online (Sandbox Code Playgroud)

和访问

http://localhost/angularsite/image1.gif
Run Code Online (Sandbox Code Playgroud)

我也可以使用完全限定的路径,但是如果你想这样做,你需要在路径中添加一个前导斜杠,因为__dirname没有尾部斜杠

app.use('/angularimages', express.static( __dirname + '/../angularapp/images'));
Run Code Online (Sandbox Code Playgroud)

并访问此

http://localhost/angularimages/image1.gif
Run Code Online (Sandbox Code Playgroud)

需要仔细关注路径构建,但通过一些练习,您可以组织对资源的访问,而无需在单个文件树中同时构建快速应用程序和前端代码.这有时可以简化重构构建的重构并增强解决方案的模块化.

在我的情况下,我预计从Angular-js前端演变为涉及React.js的前端,并且这种并行文件树的方法可以增强重构,因为它隔离了系统的每个子部分中复杂的构建依赖性.