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

Angularjs 使用express.js,我可以从根目录之外访问静态文件吗?,angularjs,express,Angularjs,Express,我有一个express应用程序,我将使用它作为代理,它可以捕获用Angular编写的应用程序发出的一些请求。Angular应用程序已经存在,并且具有我不想更改的构建配置 我想在并行文件树中管理Angular和Express应用程序,例如: Angular应用程序位于以下路径 /src/angularapp/images/img1.gif /src/expressapp/app.js 我可以从包含Express.js应用程序的并行文件树中访问Angular应用程序内部的静态资源吗?我试过几次,但发

我有一个express应用程序,我将使用它作为代理,它可以捕获用Angular编写的应用程序发出的一些请求。Angular应用程序已经存在,并且具有我不想更改的构建配置

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

Angular应用程序位于以下路径 /src/angularapp/images/img1.gif

/src/expressapp/app.js


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

我发布此消息是因为我正在搜索答案,但找不到答案。表面上看,这是可能的,但我在正确配置它时遇到了很大的困难

最后,我发现下面的方法很好,但相当微妙的语法差异导致事情没有按预期进行

在express根目录中有一个静态目录的简单模型很简单

app.use (express.static( './public'));
假设我的静态图像位于

/root/expressapp/public/images 
我可以使用

您还可以看到表单

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的前端,这种并行文件树的方法可以增强重构,因为它隔离了系统每个子部分中复杂的构建依赖关系

我必须使用
path.join()
使它工作。例如:

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

如果应用程序的根文件夹中存在公用文件夹,则使用
app.use('/static',express.static(path.join(uu dirname,'public'))

如果公用文件夹位于应用程序的根文件夹之外,则使用
app.use('/static',express.static(path.join(uu dirname,../public'))

我可以使用绝对路径吗