Strapi에서 임의로 정렬된 레코드 집합을 얻는 방법
9439 단어 strapijavascriptheadlesscms
이 프로젝트 스택은 프런트엔드의 경우 Next.js이고 백엔드의 경우 Strapi입니다. 이 게시물에서는 백엔드 측면에 초점을 맞추고 Strapi 컬렉션 유형의 임의 레코드 집합을 반환하는 방법을 살펴봅니다.
"잠깐만요, Strapi는 사용 가능한 많은 매개변수가 있는 API를 노출합니다. 단순히 매개변수를 전달하면 이 작업이 완료됩니다."라고 생각할 수 있습니다. 문제는... 임의로 정렬하기 위해
_sort
매개변수에 전달할 수 있는 값이 없다는 것입니다.따라서 임의로 선택한 일부 레코드 집합을 가져오려면 Partnerships 컬렉션 유형에 대한 사용자 지정 끝점을 빌드해야 합니다.
먼저 경로를 추가해야 합니다.
api/partnership/config/routes.json
에 추가해 보겠습니다.{
"routes": [
{
"method": "GET",
"path": "/partnerships/random",
"handler": "partnership.random",
"config": {
"policies": []
}
}
]
}
좋습니다. 이제 Partnership 컨트롤러에서
random
메서드를 만들 수 있습니다. api/partnership/controllers/partnership.js
로 이동하여 덤random
메서드를 구현하여 도달할 수 있는지 확인합니다."use strict";
module.exports = {
async random() {
return "Hello world"
}
}
그런 다음 브라우저에서
http://localhost:1337/partnerships/random
로 이동하면... HTTP 403 오류가 표시됩니다. 이는 정상이며 기본적으로 Strapi 엔드포인트에 연결할 수 없습니다. Strapi의 관리 UI로 이동하여 설정 > 역할 > 공개에서 random
끝점 사용자 파트너십 모델을 확인해야 합니다.이 설정을 저장하고 임의 끝점에 도달하도록 다시 시도하십시오. 이제 Hello world 🎉를 보여줍니다.
이제 끝점을 구현할 수 있습니다.
먼저 모든 레코드세트를 무작위로 정렬해야 합니다. 이를 달성하려면 쿼리를 작성해야 합니다. Strapi는 Bookshelf을 ORM으로 사용하고 있습니다. 따라서 파트너십 모델을 가져오는 것으로 시작할 수 있으므로 쿼리를 실행할 수 있습니다. 쿼리 내에서 knex(Bookshelf가 내부적으로 사용하는 쿼리 빌더) 쿼리 빌더 인스턴스를 얻습니다. 이 쿼리 작성기 인스턴스에서 레코드 집합을 무작위로 주문하도록 요청할 수 있습니다. 이것을 시도해 봅시다:
async random() {
const result = await strapi
.query("partnership")
.model.query((qb) => {
qb.orderByRaw("RANDOM()")
})
.fetchAll()
return result.toJSON()
}
/partnerships/random
끝점에 도달하려고 시도하고 모든 파트너십이 무작위로 정렬되는지 확인합니다. 모든 레코드 세트를 얻으려는 경우 트릭을 수행할 수 있습니다. 하지만 내 경우에는 ID로 일부 레코드 집합을 제외하고 반환되는 레코드 집합의 수를 제한할 수 있기를 원했습니다. 내가 한 방법은 다음과 같습니다.async random({ query }) {
const DEFAULT_LIMIT = 10
const limit = query._limit || DEFAULT_LIMIT
const excludedIds = query.id_nin || []
const result = await strapi
.query("partnership")
.model.query((qb) => {
qb
.whereNotIn("id", excludedIds)
.orderByRaw("RANDOM()")
.limit(limit)
})
.fetchAll()
return result.toJSON()
}
이렇게 하면 2개의 임의 파트너십을 얻을 수 있으며 다음을 수행하여 반환된 레코드 집합에서 ID
1
와의 파트너십을 절대 갖지 않을 것입니다.const url = new URL("http://localhost:1337/partnerships/random")
url.search = new URLSearchParams({
"id_nin[]": [1],
_limit: 2
}).toString()
const response = await fetch(url)
const data = await response.json()
도움이 되길 바랍니다!
Edge2Edge Media에 Unsplash님의 표지 사진
Reference
이 문제에 관하여(Strapi에서 임의로 정렬된 레코드 집합을 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/drazik/how-to-get-randomly-sorted-recordsets-in-strapi-522d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)