fastify에서 ajv-i18n을 어떻게 사용할 수 있습니까?

radiorz

배경

  • 고정하다
  • json 스키마
  • ajv

문제

내 project / index.js에 setErrorHandler를 추가하면 작동하지 않습니다.

require('module-alias/register')
const Fastify = require('fastify')
const PORT = process.env.PORT || 3000
const sequelize = require('./orm')
const swagger = require('./config').swagger
const localize = require('ajv-i18n')
const app = Fastify({
  logger: {
    prettyPrint: true
  },
  ajv: {
    customOptions: {allErrors: true, jsonPointers: true },
    plugins: [
      require('ajv-errors')
    ]
  }
})
app.register(require('fastify-sensible'))
app.register(require('fastify-swagger'), swagger)
app.register(require('./plugin/systemlogs'))
app.register(require('./plugin/authenticate')).then(()=>{
    const routes = require('./routes')
    routes(app).forEach((route, index) => {
      app.route(route)
    })
})
app.setErrorHandler((error,request,reply)=>{
  if (error.validation) {
    localize.ru(error.validation)
    reply.status(400).send(error.validation)
    return
  }
  reply.send(error)
})

const start = async () => {
  try {
    await sequelize.sync({})
    app.log.info('database sync correctly')
    await app.listen(PORT, '0.0.0.0')
    app.swagger()
  } catch (err) {
    app.log.error(err)
    process.exit(1)
  }
}
start()

질문

ajv i18n을 사용하여 오류를 중국어로 바꾸고 싶습니다. 어떻게해야합니까? 나는 이런 식으로하는데 작동하지 않습니다. fastify에서 ajv-i18n을 어떻게 사용할 수 있습니까? setErrorHandler를 어디에 추가해야합니까?

radiorz

이 문제를 처리하는 다른 방법이 있습니다.

감사:

이것은 또 다른 방법입니다.

const fastify = require('fastify')
const localize = require('ajv-i18n')

const app = fastify({
  ajv: {
    customOptions: { allErrors: true, jsonPointers: true },
    plugins: [
      require('ajv-errors')
    ]
  },
  schemaErrorFormatter: (errors, dataVar) => {
    localize.ru(errors);
    const myErrorMessage = errors.map(error => error.message.trim()).join(', ');
    return new Error(myErrorMessage)
  }
})

app.get('/', {
  schema: {
    querystring: {
      type: "object",
      properties: { a: { type: "string", nullable: false } },
      required: ["a"],
    },
  },
}, async function (req, res) {})

app.listen(3000) 

및 응답의 예 :

{
  "statusCode": 400,
  "error": "Bad Request",
  "message": "должно иметь обязательное поле a"
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ActiveRecord 외부의 ActiveModel :: Validations에서 I18N 번역을 어떻게 사용할 수 있습니까?

분류에서Dev

Django의 CheckboxSelectMultiple 레이블에 I18N을 어떻게 적용 할 수 있습니까?

분류에서Dev

Ajv를 사용하여 JSON 스키마의 하위 집합을 어떻게 컴파일 할 수 있습니까?

분류에서Dev

Windows에서 TortoiseSVN을 어떻게 사용할 수 있습니까?

분류에서Dev

Javascript에서 DOMStringMap을 어떻게 사용할 수 있습니까?

분류에서Dev

if 문에서 OR을 어떻게 사용할 수 있습니까?

분류에서Dev

CucumberJS에서 Jasmine을 어떻게 사용할 수 있습니까?

분류에서Dev

레일 i18n 파일을 어떻게 평평하게 할 수 있습니까?

분류에서Dev

I18n 로케일에 CSS 스타일을 어떻게 넣을 수 있습니까?

분류에서Dev

자바 스크립트의 i18next에서 번역을 어떻게 사용할 수 있습니까?

분류에서Dev

함수에서 별칭을 어떻게 사용할 수 있습니까?

분류에서Dev

Linux에서 Foundation의 URLRequest 유형을 어떻게 사용할 수 있습니까?

분류에서Dev

nextjs에서 application / ld + json을 어떻게 사용할 수 있습니까?

분류에서Dev

JS 파일에서 Github 비밀을 어떻게 사용할 수 있습니까?

분류에서Dev

vue에서 v-html을 어떻게 사용할 수 있습니까?

분류에서Dev

nunit TestCases에서 튜플을 어떻게 사용할 수 있습니까?

분류에서Dev

React App에서 DataTable을 어떻게 사용자 정의 할 수 있습니까?

분류에서Dev

VS Code에서 Intellisense for Selenium을 어떻게 사용할 수 있습니까?

분류에서Dev

Vue 구성 요소에서 Bootstrap을 어떻게 사용할 수 있습니까?

분류에서Dev

podman에서 --network 옵션을 어떻게 사용할 수 있습니까?

분류에서Dev

맵에서 어떻게 비트 셋을 사용할 수 있습니까?

분류에서Dev

Thumb의 ControlTemplate에서 IsPressed 속성을 어떻게 사용할 수 있습니까?

분류에서Dev

Flutter에서 AnimatedPositioned의 AnimatedSize 자식을 어떻게 사용할 수 있습니까?

분류에서Dev

패치 파일에서 git difftool을 어떻게 사용할 수 있습니까?

분류에서Dev

Where of lambda function C #에서 목록을 어떻게 사용할 수 있습니까?

분류에서Dev

bindingsource.filter에서 공백을 어떻게 사용할 수 있습니까?

분류에서Dev

Visual Studio 2012 Lightswitch에서 MySQL을 어떻게 사용할 수 있습니까?

분류에서Dev

Ubuntu에서 LVM 스냅 샷을 어떻게 사용할 수 있습니까?

분류에서Dev

Network Manager에서 .ovpn 파일을 어떻게 사용할 수 있습니까?

Related 관련 기사

  1. 1

    ActiveRecord 외부의 ActiveModel :: Validations에서 I18N 번역을 어떻게 사용할 수 있습니까?

  2. 2

    Django의 CheckboxSelectMultiple 레이블에 I18N을 어떻게 적용 할 수 있습니까?

  3. 3

    Ajv를 사용하여 JSON 스키마의 하위 집합을 어떻게 컴파일 할 수 있습니까?

  4. 4

    Windows에서 TortoiseSVN을 어떻게 사용할 수 있습니까?

  5. 5

    Javascript에서 DOMStringMap을 어떻게 사용할 수 있습니까?

  6. 6

    if 문에서 OR을 어떻게 사용할 수 있습니까?

  7. 7

    CucumberJS에서 Jasmine을 어떻게 사용할 수 있습니까?

  8. 8

    레일 i18n 파일을 어떻게 평평하게 할 수 있습니까?

  9. 9

    I18n 로케일에 CSS 스타일을 어떻게 넣을 수 있습니까?

  10. 10

    자바 스크립트의 i18next에서 번역을 어떻게 사용할 수 있습니까?

  11. 11

    함수에서 별칭을 어떻게 사용할 수 있습니까?

  12. 12

    Linux에서 Foundation의 URLRequest 유형을 어떻게 사용할 수 있습니까?

  13. 13

    nextjs에서 application / ld + json을 어떻게 사용할 수 있습니까?

  14. 14

    JS 파일에서 Github 비밀을 어떻게 사용할 수 있습니까?

  15. 15

    vue에서 v-html을 어떻게 사용할 수 있습니까?

  16. 16

    nunit TestCases에서 튜플을 어떻게 사용할 수 있습니까?

  17. 17

    React App에서 DataTable을 어떻게 사용자 정의 할 수 있습니까?

  18. 18

    VS Code에서 Intellisense for Selenium을 어떻게 사용할 수 있습니까?

  19. 19

    Vue 구성 요소에서 Bootstrap을 어떻게 사용할 수 있습니까?

  20. 20

    podman에서 --network 옵션을 어떻게 사용할 수 있습니까?

  21. 21

    맵에서 어떻게 비트 셋을 사용할 수 있습니까?

  22. 22

    Thumb의 ControlTemplate에서 IsPressed 속성을 어떻게 사용할 수 있습니까?

  23. 23

    Flutter에서 AnimatedPositioned의 AnimatedSize 자식을 어떻게 사용할 수 있습니까?

  24. 24

    패치 파일에서 git difftool을 어떻게 사용할 수 있습니까?

  25. 25

    Where of lambda function C #에서 목록을 어떻게 사용할 수 있습니까?

  26. 26

    bindingsource.filter에서 공백을 어떻게 사용할 수 있습니까?

  27. 27

    Visual Studio 2012 Lightswitch에서 MySQL을 어떻게 사용할 수 있습니까?

  28. 28

    Ubuntu에서 LVM 스냅 샷을 어떻게 사용할 수 있습니까?

  29. 29

    Network Manager에서 .ovpn 파일을 어떻게 사용할 수 있습니까?

뜨겁다태그

보관