允许ExpressJS后端的前端相对路径

时间:2016-09-01 16:23:50

标签: javascript node.js express path

我正忙着使用Express 4.14构建应用程序。关于路由,当请求以“https://example.com/page”形式出现时,例如我正在使用res.sendFile(__dirname + "/../client/pages/page/index.html");

前端开发人员使用页面中的相对链接来包含他的ReactJS脚本 - 例如,他使用像<script src="js/index.js"></script>这样的标记。当然,问题是js/index.js的请求将转到NodeJS服务器并返回404,因为项目的根目录中没有文件/js/index.js,而是client/pages/home/js/index.js 。有没有办法允许从页面文件夹中进行相对路径?

我正在使用express.static中间件,但问题是有多个页面,每个页面都有旧文件夹 - 它们被分成了自己的小SPA,以便制作一个/public个静态使用当前设置,目录不可行。

这是文件目录设置:

project
|- server.js
|   |- node_modules
|   |- config
|   |- controllers
|   |- models
|   |- client
|      |- pages (Splitting the pages into React SPA)
|         |- pageFolder (React SPA, one per module we need.)
|            |- page.html
|            |- other files here..

路由到客户端的控制器是controllers/clientCtrl.js,它在index.html中提供client/pages/pageFolder

index.html中尝试在index.js中包含pageFolder时,响应为Cannot GET /index.html,因为它将请求发送到NodeJS服务器而不是查看当前目录

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

正如其他人所建议的那样,有充分的理由使用let react或express来处理所有路由。如果您当前的作业不允许这样做,您可能希望将express.static与完整目录一起使用。

通过拥有index.html和webpacked包,您可以将其他页面拆分为子目录,并确保相对路径指向静态html和js文件。

例如,如果index.html存在于

public - index.html - bundle.js - pagefolder - - page.html - - page.js

只要您提供整个公共目录,从index.html到./pagefolder/page.html的链接就会生效,等等。