【问题标题】:Express and URL rewriting | HTML5 historyExpress 和 URL 重写 | HTML5 历史
【发布时间】:2013-04-13 19:58:21
【问题描述】:

我正在尝试构建一个简单的服务器来提供所有逻辑都在其中的单个 HTML 页面 由 Angular 处理。就我使用 HTML5 历史模式而言,我能够导航 通过标准 URL。

现在,为了完成这项工作,我需要启用 URL 重写。我试着用这一堆线和 尽管总是返回正确的 HTML 页面,但 URL 会有所不同,并且不会保留初始的 价值。例如 /popular 应该加载 index.html 并保留 URL /popular 以便 JS逻辑可以加载需要的页面。

下面是快递代码。

var express = require("express");
var app = express();

app.configure(function(){
  app.use(express.static(__dirname + '/dist'));
}); 

app.get("/*", function(req, res, next){
  res.sendfile(__dirname + '/dist/index.html');
});

app.listen(3000);

感谢任何建议。 谢谢大家。

【问题讨论】:

  • 上面的代码应该可以工作(事实上,确实可以)。您在下面的评论中写道您正在获得重定向;我怀疑这些是由 Express 生成的,因为似乎没有任何迹象表明它有理由生成它们。所以也许 Angular 正在更改 URL,你在 Node 前面使用了代理,或者上面的代码不完整。

标签: node.js angularjs express


【解决方案1】:

您需要为相对文件名设置根目录。

app.all('/*', function(req, res) {
  res.sendfile('index.html', { root: __dirname+'/dist' });
});

【讨论】:

  • 使用这行代码,一个可能的 URL /popular 仍然被重定向到 URL /。甚至更多我可以看到我必须添加一些文件夹,如 /images 或 /scripts 以不被考虑。非常感谢。
  • 如果您按照示例 here 创建一个“静态”文件夹来处理所有页面资产,因此您只需要处理单个路径 /static 而不是单独处理 /img /scripts 等.
  • 非常感谢。我要试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 2012-01-28
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2016-04-18
相关资源
最近更新 更多