javascript Fastify架构未验证请求

w46czmvw  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(105)

我们在后端使用Fastify作为框架来处理Node.js。
我们有一个用于验证所使用的输入的模式。
这是schema.ts中的模式

export const profileSchema = {
  type: 'object',
  properties: {
    FirstName: {
      type: 'string',
      pattern: '^([a-zA-z]{2,100})+$'
    },
    LastName: {
      type: 'string', 
      pattern: '^([a-zA-z]{2,100})+$'
    },
    MobilePhone: {
      type: 'string',
      pattern: '[0-9]{10}',
    }
  },
} as const

main.ts

import { profileSchema } from './schema'
const app = fastify()

app.post(`/createProfile`,
    {
      schema: {
        body: profileSchema,
      }
    },
    createProfile
)

然而,当我们将移动的号码作为Number而不是String传递时,它仍然是working,而不是抛出**error**。
输入

{
 "FirstName": "John", 
 "LastName": "Doe",
 "MobilePhone": 9876543210
}

理想情况下,因为我们将移动的号码作为Number传递,所以模式应该验证并抛出错误。

djmepvbi

djmepvbi1#

创建fastify示例时,需要将coerceTypes设置为false

const app = require('fastify')({
    ...  // other settings
    ajv: {
      customOptions: {
        coerceTypes: false,
      }
    }
  })

默认情况下,这将禁用对所有路由和所有方案的强制。如果只需要禁用对特定路由或方案的强制,则可以使用setValidatorCompiler函数

相关问题