【问题标题】:AngularJS and Express Routing issueAngularJS 和快速路由问题
【发布时间】:2014-01-11 20:51:02
【问题描述】:

我正在使用 AngularJS 和 ExpressJS,但遇到了路由问题。我看到了许多其他帖子,但这些解决方案似乎都没有奏效。这是我在 Express 中的路线:

module.exports = function(app, auth) {
    //Api routes
    var mycontroller = require('../app/controllers/mycontroller');
    app.get('/api/dostuff/:id', mycontroller.getBlockByHash);

    //Home route
    app.get("/", function(req, res) {
      res.render('index');
    });
  };

当我转到我的根 / 时,一切都按预期工作。 ExpressJS 提供我的索引,而 Angular 则负责其余的。当我单击链接 /blocks 时,它按预期工作,因为 AngularJS 选择了路线。但是当我刷新时,我得到一个 404 not found 错误。

我尝试了app.get('*',但这给了我一个完全不同的错误,没有加载。

我正在使用Jade 使用 Express 创建基本页面结构。我的 Express 配置是:

app.use(express.favicon());
app.use(express.static(config.root + '/public'));

【问题讨论】:

  • +1 用于显示控制台错误

标签: angularjs express pug


【解决方案1】:

当使用 html5Mode 时,documentation 表示:

使用此模式需要在服务器端重写 URL,基本上你必须重写所有指向应用程序入口点的链接(例如 index.html)

没有提到的是:

  • 您应该排除静态资产,例如脚本/样式/图像/字体等。
  • 您还应该排除您的 Restful API

你的情况:

您遇到的错误是将 html 快递到脚本标签中,而浏览器无法将它们解析为有效的 javascript。

使用 express.static 提供静态资源,然后使用 app.get('*', 将所有其他请求重定向到您的 angular.js 入口点 (index.html)。

express.js 中间件订单很重要!

【讨论】:

  • 我已经在使用express.static,当我使用app.get('*'时,我得到了原帖中显示的错误
  • express.static 必须在 app.router 之前声明。检查这个:stackoverflow.com/questions/12695591/…
  • 我已经这样做了,但是当我刷新页面时,我得到一个文件下载...我正在使用玉文件
  • @LeandroHoffmann 请发布问题并提供更多信息
  • 看这里的问题,谢谢帮助-> stackoverflow.com/questions/27971489/…
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 2021-03-08
  • 2014-08-21
  • 2014-12-09
  • 2013-06-30
  • 1970-01-01
相关资源
最近更新 更多