这是我第一次使用Fastify,我正面临一个问题,试图在打字稿中获取身体中的值。
有什么想法或建议吗?谢谢!
更新:我想避免使用app.get(...)等来简化代码
这是我的密码:
App.ts
const buildServer = (options = {}) => {
const app = fastify(options);
app.register(routesApiV1, { prefix: '/api'});
return app;
}Routes.ts
const routesApiV1: FastifyPluginCallback = (fastify, options, done) => {
fastify.route(userRoute);
done();
}User.ts
const handler: RouteHandlerMethod = async (req, res) => {
const {
name,
lastName,
dateOfBirth,
addressLine,
zipCode,
city,
country
} = req.body; // Property '...' does not exist on type 'unknown'
...
}
const route: RouteOptions = {
method: 'GET',
url: '/user/:id',
// schema: fastifySchema, Tried but not working
handler,
preValidation,
}发布于 2022-11-14 20:02:08
FastifyRequest类型是泛型类型。你应该把它传给你的体型..。
import type { FastifyRequest } from 'fastify'
interface BodyType {
name: string
}
const handler = async (req: FastifyRequest<{ Body: BodyType }>) => {
const { name } = req.body
}使用RouteHandlerMethod时,默认情况下将请求对象键入为FastifyRequest<{ Body: unknown }>,因此主体的类型未知。
发布于 2021-11-11 08:24:33
您需要声明类型并键入RouteHandlerMethod和RouteOptions,方法如下:
类型
type Body = {
name: string;
// ...
}
type Response = {
// ...
}RouteHandlerMethod
import { RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerDefault, RouteHandler, RouteHandlerMethod } from "fastify";
const handler: RouteHandlerMethod<
RawServerDefault,
RawRequestDefaultExpression,
RawReplyDefaultExpression,
{ Reply: Response; Body: Body }
> = async (req, res) => {
const {
name,
lastName,
dateOfBirth,
addressLine,
zipCode,
city,
country
} = req.body; // Property '...' does not exist on type 'unknown'
...
}RouteOptions
import { RawReplyDefaultExpression, RawRequestDefaultExpression, RawServerDefault, RouteHandler, RouteHandlerMethod, RouteOptions } from "fastify";
const route: RouteOptions<RawServerDefault,
RawRequestDefaultExpression,
RawReplyDefaultExpression,
{ Reply: Response, Body: Body }> = {
method: 'GET',
url: '/user/:id',
// schema: fastifySchema, Tried but not working
handler,
preValidation,
}https://stackoverflow.com/questions/69789949
复制相似问题