【问题标题】:NextJS: use a custom server (NestJS) to render specific pagesNextJS:使用自定义服务器(NestJS)呈现特定页面
【发布时间】:2021-07-06 23:55:36
【问题描述】:

我正在尝试将 NestJS 用作 NextJS 的 custom server,如 this article 中所述,简化版本如下所示:

@Controller('/')
export class ViewController {
  @Get('*')
  async static(@Req() req: Request, @Res() res: Response) {
    // This returns a Next() app as described in https://nextjs.org/docs/advanced-features/custom-server
    const server = this.viewService.getNextServer();
    const handle = server.getRequestHandler();
    handle(req, res);
  }
}

只要我为任何路由注册处理程序(即@Get('*')),它就可以正常工作。例如。当我访问/home 时,会呈现pages/home.tsx

但是,由于another issue,我只想为特定页面注册它,例如@Get('/home')。在这种情况下,我从 Next 获得了一个空的 404 页面(页面上没有内容,标题为 404)。控制台显示:

event - build page: /next/dist/pages/_error
wait  - compiling...
event - compiled successfully

NestJS 在后台使用 express,所以我想这会转化为 server.get('/home', handle); 之类的东西。如果我尝试使用正则表达式,例如相同的问题@Get(/^\/(?!graphql).*/)。如果我尝试@Controller('/home')@Get('*'),也会出现同样的问题。

正在寻找一些解决方案来让 Nest 应用为特定的下一页提供服务。我知道nest-next,但我更喜欢设置一个普通的控制器。

【问题讨论】:

    标签: javascript reactjs typescript next.js nestjs


    【解决方案1】:

    最终使用 Next 中的 render 方法,this article 中也有说明:

    @Controller('/')
    export class ViewController {
      @Get('home')
      public async showHome(@Req() req: Request, @Res() res: Response) {
        const parsedUrl = parse(req.url, true);
        // This returns a Next() app as described in https://nextjs.org/docs/advanced-features/custom-server
        const server = this.viewService.getNextServer();
        await server.render(req, res, parsedUrl.pathname, parsedUrl.query);
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-29
      • 1970-01-01
      • 2019-08-17
      • 2011-02-23
      • 1970-01-01
      • 2011-02-08
      • 2021-06-08
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多