首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Fastify打字稿:身体不明

Fastify打字稿:身体不明
EN

Stack Overflow用户
提问于 2021-10-31 19:32:22
回答 2查看 1.3K关注 0票数 1

这是我第一次使用Fastify,我正面临一个问题,试图在打字稿中获取身体中的值。

有什么想法或建议吗?谢谢!

更新:我想避免使用app.get(...)等来简化代码

这是我的密码:

App.ts

代码语言:javascript
复制
const buildServer = (options = {}) => {
  const app = fastify(options);
  app.register(routesApiV1, { prefix: '/api'});
  return app;
}

Routes.ts

代码语言:javascript
复制
const routesApiV1: FastifyPluginCallback = (fastify, options, done) => {
  fastify.route(userRoute);
  done();
}

User.ts

代码语言:javascript
复制
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,
}
EN

回答 2

Stack Overflow用户

发布于 2022-11-14 20:02:08

FastifyRequest类型是泛型类型。你应该把它传给你的体型..。

代码语言:javascript
复制
import type { FastifyRequest } from 'fastify'

interface BodyType {
  name: string
}

const handler = async (req: FastifyRequest<{ Body: BodyType }>) => {
    const { name } = req.body
}

使用RouteHandlerMethod时,默认情况下将请求对象键入为FastifyRequest<{ Body: unknown }>,因此主体的类型未知。

票数 1
EN

Stack Overflow用户

发布于 2021-11-11 08:24:33

您需要声明类型并键入RouteHandlerMethodRouteOptions,方法如下:

类型

代码语言:javascript
复制
type Body = {
  name: string;
  // ...
}

type Response = {
   // ...
}

RouteHandlerMethod

代码语言:javascript
复制
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

代码语言:javascript
复制
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,
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69789949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档