【问题标题】:Angular 2 routing only works in ng serve but not nodemonAngular 2 路由仅适用于 ng serve 但不适用于 nodemon
【发布时间】:2017-07-18 01:56:35
【问题描述】:

我目前正在开发 Angular 2 应用程序。但是我很难理解为什么我的路由在ng serve 中有效,而不在nodemon 中有效?我已经根据我的研究尝试了多种方法,但它们并没有像我想象的那样工作。 (可能是我的理解不够)

方法一

app-routing.module.ts 中添加useHash: true 但这会导致所有URL 中都出现#。我认为这是为了调试目的,对吧?

const routes = [
{ path: '', component: sampleComponent1 },
{ path: 'page2', component: sampleComponent2 }
];

@NgModule({
    imports: [RouterModule.forRoot(routes, {useHash: true})],
    exports: [RouterModule]
})

方法二

app.js 更改为在抛出错误时呈现index。此方法不会在 URL 中包含 #,但它总是会在我的控制台中返回类似 GET /page2 404 1.688 ms - 987 的错误。

app.use(function (err, req, res, next) {
   // set locals, only providing error in development
   console.log(err.message);
   res.locals.message = err.message;
   res.locals.error = req.app.get('env') === 'development' ? err : {};

   res.status(err.status || 500);
   res.render('error');
});

所以到目前为止,我更多地坚持方法 2,因为 URL 中没有显示 #,但我不确定方法 2 是否是正确的方法。有人可以帮我解决这个问题吗?

【问题讨论】:

  • useHash 不仅仅用于调试。这是一种设计选择。
  • 您是否尝试过构建然后使用 nodemon 为您的 dist 文件夹提供服务?
  • @Janpan 是的,我总是在运行 nodemon 之前进行 ng 构建

标签: node.js angular npm angular2-routing angular-cli


【解决方案1】:

这在 Angular CLI 开发中起作用的原因是所有不存在的路由都作为 index.html 提供服务

这允许您的 Angular 应用程序处理所有路由,而不管实际请求的 URL 是什么。一旦您的应用程序在浏览器中启动,Angular 路由器(假设您正在使用该路由器)将读取路由信息并向您的用户显示正确的路由。

这里还有其他答案可以解释此解决方案,具体取决于您的网络服务器。

【讨论】:

  • 这听起来和我在方法 2 中所做的类似吧?因为每当我请求页面时它总是会收到错误 404,例如localhost/page2 和 index.html 将得到服务
猜你喜欢
  • 2018-12-12
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
相关资源
最近更新 更多