Reputation: 6768
How can I have a controller in NestJS that redirects to a link but if something goes wrong, renders a UI?
Something like this is always giving me a redirect:
@Post()
@Redirect()
public async authenticateUser(
@Body('email') email: string,
@Body('password') password: string,
@Body('challenge') loginChallenge: string,
@Body('remember') remember: string,
@Res() res: Response,
) {
try {
const redirectUrl = await this.loginService.authenticateUser(
email,
password,
loginChallenge,
remember,
);
return {
url: redirectUrl,
};
} catch (error) {
return res.render('login', {
challenge: loginChallenge,
errorMessage: error && error.message ? error.message : undefined,
});
}
}
Upvotes: 1
Views: 2099
Reputation: 636
You can redirect using Express's <Express.Response>.redirect("url")
method.
@Post() // remove @Redirect decorator from here
public async authenticateUser(
@Body('email') email: string,
@Body('password') password: string,
@Body('challenge') loginChallenge: string,
@Body('remember') remember: string,
@Res() res: Response,
) {
try {
const redirectUrl = await this.loginService.authenticateUser(
email,
password,
loginChallenge,
remember,
);
return res.redirect(redirectUrl); // use res.redirect instead of @Redirect
} catch (error) {
return res.render('login', {
challenge: loginChallenge,
errorMessage: error && error.message ? error.message : undefined,
});
}
}
Upvotes: 2