개체의 AdonisJS 유효성 검사 파일
2534 단어 adonisjsnodebeginnersprogramming
문맥
이 문제는 처리를 위해 백엔드에 제출해야 하는 데이터 블록이 있을 때 발생했습니다. 형식은 다음과 같습니다.
{
"users": [
{
"name": "John Doe",
"avatar": <File>
},
...
]
}
그리고 AdonisJS의 문서에 따라 이 스니펫을 사용하여 데이터의 유효성을 검사합니다.
params = await request.validate({
schema: schema.create({
users: schema.array().members(
schema.object().members({
name: schema.string({ trim: true }),
avatar: schema.file({
size: '10mb',
extnames: ['jpg', 'heic']
}),
})
),
}),
})
문제
문제는 백엔드에 제출된 데이터가 AdonisJS에 의해
request.all()
및 request.allFiles()
두 부분으로 저장된다는 것입니다. 따라서 데이터는request.all() : { "users": [ { "name": "John Doe" } ] }
request.allFiles(): { "users": [ { "avatar": <File> } ] }
유효성 검사를 실행하려면 이러한 데이터 조각을 병합하여 규칙을 통과하는지 확인해야 합니다.
유감스럽게도 다음AdonisJS's author idea의 심층 병합은 프레임워크의 성능에 영향을 미칩니다. 따라서 얕은 병합을 사용하여 결합하고 다음과 같이 보입니다.
data = {
...body,
...files,
}
그리고 당신은 무슨 일이 일어 났는지 압니다. 병합 후 사용자 항목에는 아바타 속성만 있습니다.
해결책
에 대한 의견의 작성자 제안으로 lodash 병합을 사용하여 심층 병합 데이터를 수행하고 병합된 데이터의 유효성을 검사하기 위해 AdonisJS 독립 실행형 유효성 검사기를 사용하여 데이터 유효성 검사 방법을 변경했습니다.
import lodashMerge from 'lodash/merge'
import { validator } from '@ioc:Adonis/Core/Validator'
...
allData = lodashMerge({}, request.all(), request.allFiles())
params = await validator.validate({
data: allData,
schema: schema.create({
users: schema.array().members(
schema.object().members({
name: schema.string({ trim: true }),
avatar: schema.file({
size: '10mb',
extnames: ['jpg', 'heic']
}),
})
),
}),
})
이것이 제출된 방식과 동일한 매개변수를 얻은 방법입니다.
독자 여러분, 이 문제를 해결할 다른 방법이 있으면 알려주십시오.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(개체의 AdonisJS 유효성 검사 파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/memphisnguyen/adonisjs-validate-file-in-object-8f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)