问题描述
我正在使用 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)来服务静态文件。
附注。我英语不太好。