Как отправить ответ от промежуточного программного обеспечения, созданного на сервере Nest fastify?

Я создал проект NestJs с помощью Fastify и создал для него промежуточное программное обеспечение, но я не могу понять, как отправить ответ клиенту, подобно тому, как мы могли бы сделать экспресс, любая помощь будет оценена по достоинству, спасибо !, вот мой промежуточный код:

import {
  Injectable,
  NestMiddleware,
  HttpException,
  HttpStatus,
} from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: Function) {
    console.log('Request...', res);
    // throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);
    next();
  }
}

person Faaiz ali Khan    schedule 09.09.2020    source источник
comment
Вы пробовали res.send(), res.json() или res.json()?   -  person Daniel    schedule 09.09.2020
comment
@ Даниэль да, но они выдают мне неопределенные ошибки   -  person Faaiz ali Khan    schedule 09.09.2020
comment
Протестировал локально и res.send() работал точно так же, как в экспрессе. Смотрите ответ ниже   -  person Daniel    schedule 09.09.2020
comment
@Daniel обратите внимание, что я переопределяю экспресс-настройку по умолчанию с помощью плагина fastify, поэтому мой проект использует fastify: docs. nestjs.com/techniques/performance, вы тоже использовали fastify?   -  person Faaiz ali Khan    schedule 09.09.2020
comment
Виноват. Но теперь у меня есть правильный ответ :) (извините за путаницу)   -  person Daniel    schedule 09.09.2020
comment
@Daniel Теперь все работает! Большое спасибо!   -  person Faaiz ali Khan    schedule 09.09.2020


Ответы (1)


Похоже, что Fastify абстракция использует объекты NodeJS vanila http (здесь вводится res https://nodejs.org/api/http.html#http_class_http_serverresponse )

// app.middleware.ts

import { Injectable, NestMiddleware } from '@nestjs/common';
import { ServerResponse, IncomingMessage } from 'http';

@Injectable()
export class AppMiddleware implements NestMiddleware {
  use(req: IncomingMessage, res: ServerResponse, next: Function) {
    res.writeHead(200, { 'content-type': 'application/json' })
    res.write(JSON.stringify({ test: "test" }))
    res.end()
  }
}
// app.module.ts

import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppMiddleware } from './app.middleware';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [],
})
export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(AppMiddleware)
      .forRoutes({ path: '*', method: RequestMethod.ALL }); // apply on all routes
  }
}
person Daniel    schedule 09.09.2020