【问题标题】:How to tell express to serve a particular angular "page"如何告诉快递服务特定的角度“页面”
【发布时间】:2017-11-28 20:14:32
【问题描述】:

我编写了一个 Angular 应用程序和一个 Express 应用程序。然后我编译了 Angular 应用程序,并将粘贴的 index.html 和其他 js/CSS 文件分别复制到 Express 的 viewspublic 文件夹中。

现在,当我进入 root(在我的情况下为localhost:3000)时,它工作正常。如果我单击页面上的任何链接(例如注册RouterLink),这将触发任何角度路由器,它可以正常工作并打开该特定页面(注册页面)。现在,如果我再次重新加载它,它将产生Cannot GET /signup。这可能是因为views 文件夹中没有signup 页面。所以我的问题是:

  1. 如何让我的 MEAN 应用根据 Angular 路由服务 Angular 页面?
  2. 如何使用 express 路由控制 Angular 路由?

【问题讨论】:

  • 我不知道我是否正确理解了您的问题,但我认为您应该将所有 Express 路由重定向到您的 index.html,以便 Angular 负责路由。也许这会有所帮助stackoverflow.com/a/43870014/2702370
  • 我不确定“复制粘贴的 index.html 和其他 js/CSS 文件”是在编译后部署 Angular 应用程序的正确方法。在 'ng build --prod' 之后,您编译的应用程序全部位于“dist”目录中。

标签: angular express routing mean-stack


【解决方案1】:

您可以实施哈希策略来修复此错误

RouterModule.forRoot(routes, {
    useHash: true
});

或者在您的 app.js 中的 express 应用程序中使用它

app.get('**', (req, res, next) => {
    if (!req.originalUrl.startsWith('/api')) {
    // Skip API calls
        res.status(200).sendFile(pathJoin(__dirname, 'public', 'index.html'));
    } else {
        next();
    }
});

【讨论】:

  • 感谢您的精彩回答!你能解释一下 useHash 是如何工作的吗?
  • 截至angular.io/api/router/RouterModule:useHash 启用了使用 URL 片段而不是历史 API 的定位策略。意味着您的网址不是 blabla.com/#/home 而是 blabla.com/home ,这与 express sn-p 完美配合。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
相关资源
最近更新 更多