如何使用 Fastify 为 Nest 添加自定义内容类型解析器
How to add custom content type parser for Nest with Fastify
我需要覆盖 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
下的预期内容
要允许空 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
和空主体。使用包罗万象的解析器解决了我的问题。
我需要覆盖 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
要允许空 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
和空主体。使用包罗万象的解析器解决了我的问题。