Jöcker
Jöcker

Reputation: 6768

Redirect or Render UI in NestJS

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

Answers (1)

barbarbar338
barbarbar338

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

Related Questions