Angular Express重定向

时间:2018-03-05 17:32:31

标签: angular express redirect angular-universal

我有我的ssr响应服务,其中包括重定向方法:

import { Injectable, Inject } from '@angular/core';

import { Response } from 'express';
import { RESPONSE } from '@nguniversal/express-engine';

@Injectable()
export class SsrResponseService {
  constructor(@Inject(RESPONSE) private response: Response) {}

  redirect(url: string, code?: number) {
    if (!!code) {
      return this.response.redirect(code, url);
    } else {
      return this.response.redirect(url);
    }
  }
}

然后,在我的组件中,如果不满足某些条件,我需要重定向用户:

this.responseService.redirect('/some-other-url', 301);

重定向工作正常,用户被重定向,但服务器记录:

Unhandled Promise rejection: Can't set headers after they are sent. ; 
Zone: <root> ; Task: Promise.then ; Value: Error: Can't set headers after they are sent.

完整堆栈跟踪:https://gist.github.com/MrCroft/c8a659567a3b248744b62a7cc04f061d

我可以采取哪些不同的措施来避免错误? 请注意,只能在Angular应用程序代码中做出决定。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,并找到了解决方法:

代替使用this.response.redirect(url, code),请使用:

this.response.status(code)
this.response.setHeader('Location', url);

错误消失