Express Server + Angular 深层链接

问题描述

我正在使用 Express + Angular 创建 SPA。部分功能是一封电子邮件,其中包含用户在重置密码 (https://[domain].com/reset-password/[token]) 时点击的链接

用户点击链接时,它会将他们带到应用登陆页面 (/) 而不是重置密码页面 (/reset-password/[token])。

如何处理从电子邮件到 express 到我的 angular 应用的深层链接

我的快递路线是:

router.get('*',function (req,res,next) {
  res.redirect('/');
});

我拥有的 Anagular 路线是:

{
  path: 'reset-password/:token',loadChildren: () => import('./pages/reset-password/reset-password.module').then((m) => m.ResetPasswordModule),},

如果我在 Angular 应用程序中创建一个指向 reset-password/:token 路线的链接,它会起作用。只有当链接通过 Express 发送时才会出现问题。

如何在不依赖于过去使用过的 HashLocationStratergy (RouterModule.forRoot(routes,{useHash: true})) 解决方案的情况下解决此问题

解决方法

我不知道你是如何发送angular的静态文件的。但这里有一个完整的例子。您的问题是您如何提供静态文件。

// Express will serve all static files from public folder
const publicPath = path.resolve(__dirname,'./public');
app.use(express.static(publicPath));

然后,如果 express 没有找到文件,ej。 /home,不是文件是角度路由,发送index.html NOT REDIRECT

// Put this after all your api routes
const indexHtml = path.resolve(__dirname,'./public/index.html');
app.get('*',(req,res) => {
    res.sendFile(indexHtml);
});

这是一个express服务静态文件的例子,但这不是更好的方法,推荐使用cdn或代理(如ngnix)来服务静态文件。

附注。我英语不太好。