gpt4 book ai didi

node.js - 如何使用 ProxyPass 通过 Express 提供静态文件?

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:43 26 4
gpt4 key购买 nike

我将 Apache 与 mod_proxy 结合使用,通过 Express 为我的 Node 应用提供服务,

ProxyPass /nodeapp http://localhost:3000/
ProxyPassReverse /nodeapp http://localhost:3000/

但是静态 JS 和 CSS 是从错误的地方请求的。

例如,我想要 CSS 来自

http://homepage/nodeapp/css

但是它被要求从

http://homepage/css

最佳答案

我通过在我的应用程序的 index.html 中使用 HTML“Base”标签解决了我的环境中的这个问题,然后确保我的应用程序中的所有链接都是相对的。这将有助于确保浏览器请求适当的路径。

值得注意的是,由于我的应用程序是一个 SPA(单页应用程序),因此所有 Assets 始终有效,因为实际导航始终位于根目录。

在您的情况下,标签(在 <head> 元素内)可能如下所示:

<base href="/nodeapp/">

我对应的 Apache 配置很简单:

<Location /nodeapp>
ProxyPass http://127.0.0.1:9000
ProxyPassReverse http://127.0.0.1:9000

# other Apache directives here
</Location>

我的应用程序恰好使用 AngularJS,我可以使用 # 字符到达应用程序的“根目录”。例如,如果我想去 /settings (这将是 /nodeapp/settings 在生产中)我会指定 #settings作为 href对于任何给定的链接。您的里程可能会有所不同,当然值得一看 https://docs.angularjs.org/guide/ $location 如果您使用的是 AngularJS 并摆弄 html5Mode设置以查看最适合您的部署的设置。

我不必教 Express 关于它的挂载点,因为浏览器正在使用 <base> 请求适当的资源。上面的标签,以及 ProxyPass/ProxyPassReverse Apache 指令适本地剥离 /nodeapp在将其交给 Express 之前。

虽然我不必接触 Express 的路由器(根据上面的内容),但了解以下内容可能仍然有用。如果您使用的是 Express 4.x,则据称“安装”Express 应用程序比以前版本的 Express 更容易。这里有几个很好的例子:https://github.com/visionmedia/express/wiki/New-features-in-4.x

从那个页面:

Imagine an example routes/people.js in your project.

var people = express.Router();

people.use(function(req, res, next) {
});

people.get('/', function(req, res, next) {
});

module.exports.people = people;

You can mount it under the /people path so that any request to /people/* will route to the people router.

app.use('/people', require('./routes/people').people);

该页面还会将您定向到 Express 4.x 路由器 API: http://expressjs.com/4x/api.html#router

但是,如果您使用的是 Apache 的 ProxyPass,则通常不需要此技术。重写入站请求。

如果您的应用程序不是 SPA,您可能会发现使用 mod_proxy_html 进行即时内容重写很幸运。 .我在这方面取得的成功有限,但 AngularJS 最终不太喜欢它。不过,我相信它可能适合不同的应用。

如果您选择使用mod_proxy_html您可以在此处查看 StackOverflow 问答以获取更多信息:ProxyHTML to rewrite URL

关于node.js - 如何使用 ProxyPass 通过 Express 提供静态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22448243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com