1

我需要覆盖内容解析器,application/json以便我的应用程序接受空正文。现在它抛出:

{
    "statusCode": 400,
    "code": "FST_ERR_CTP_EMPTY_JSON_BODY",
    "error": "Bad Request",
    "message": "Body cannot be empty when content-type is set to 'application/json'"
}

我正在尝试:

import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
import { NestFactory } from '@nestjs/core';

const fastifyAdapter = new FastifyAdapter({
   addContentTypeParser: // what should go here
});

const app = await NestFactory.create<NestFastifyApplication>(AppModule, fastifyAdapter);

但我无法弄清楚在addContentTypeParser

4

1 回答 1

1

要允许空的 json 正文,您可以添加如下内容正文解析器。这不会引发错误,而是FST_ERR_CTP_EMPTY_JSON_BODY将请求正文设置为null.

const fastifyAdapter = new FastifyAdapter();

fastifyAdapter.getInstance().addContentTypeParser(
  'application/json',
  { bodyLimit: 0 },
  (_request, _payload, done) => {
    done(null, null);
  }
);

您还可以使用 done 方法的第二个参数将请求正文设置为您想要的任何值。

例如,将 body 设置为空对象,如下所示:

const fastifyAdapter = new FastifyAdapter();

fastifyAdapter.getInstance().addContentTypeParser(
  'application/json',
  { bodyLimit: 0 },
  (_request, _payload, done) => {
    done(null, {});
  }
);


此外,对于FST_ERR_CTP_INVALID_MEDIA_TYPE像我这样遇到错误的人,为空正文请求添加一个包罗万象的内容类型解析器可以解决问题。

const fastifyAdapter = new FastifyAdapter();

fastifyAdapter.getInstance()
  .addContentTypeParser(
    '*',
    { bodyLimit: 0 },
    (_request, _payload, done) => {
      done(null, null);
    }
  );

Tus 客户端,默认情况下发送一个POST没有content-type和空正文的请求。使用包罗万象的解析器解决了我的问题。

于 2021-10-05T23:01:54.497 回答