MiiZZo
@MiiZZo
JavaScript, React, NodeJS, Student

Как интегрировать neXt в neSt?

Пытаюсь совершить это, подключая neXt в кастомном адаптере neSt
// custom.adapter.ts
import { ExpressAdapter } from '@nestjs/platform-express';
import { Response } from 'express';
import next  from 'next';

const dev = true;
const nextApp = next({ dev });
const handle = nextApp.getRequestHandler();

export class NextAdapter extends ExpressAdapter {
    constructor() { super() }
    
    render(res: Response, view: string, options: any) {
        const { req } = options;
        return new Promise<void>(async (resolve) => {
            nextApp.prepare().then(async () => {

                if (req.query = '/a') {
                    await nextApp.render(req, res, '/a', req.query)
                } else {
                    handle(req, res);
                }
                resolve();
            });
        });
    }
}

А подключаю адаптер так:
// main.ts
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { NextAdapter } from './next.adapter';



async function bootstrap() {
  const app = await NestFactory.create(AppModule, new NextAdapter());

  const options = new DocumentBuilder()
    .setTitle('Blog Rest API dosc')
    .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}

bootstrap();

Но, если данный подход и может работать, что-то я делаю не так и, пробуя зайти на страницу, neXt не может найти ее статику и отдает пустую html, а в консоли браузера, соответственно, множество 404-х ошибок о не найденных файлах.
Весь остальной код я выложил на github - https://github.com/MiiZZo/nest-next/tree/master/ne...
Прошу помочь со сложившейся проблемой. Спасибо.
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
судя по твоему коду, ты вызываешь пустой конструктор, в котором ититится отдельно экспресс, ты же в свою очередь отдельно инитишь некст, как оно вообще живет я не понимаю у тебя
загляни вот сюда: гит
если и хочешь скрестить слона и носорога, то явно смотреть на этот класс, и в пределах одного инстанса делать перегрузку методов нужных тебе
но если ничего в нексте не изменилось оно же не умеет /some/:someID роуты, там все через квери.
Возможно более правильным будет использовать сервер рендер утилиты и просто затюнить пару методв без попытки один экспресс заменить оберткой ради этого.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы