사용자 지정 엔터티와 상호 작용하는 Medusa
11713 단어 beginnersjavascriptwebdev
이 문서에서는 이 사용자 지정 엔터티에 대한 새 레코드를 만드는 방법과 데이터베이스의 모든 활성 항목을 나열하는 방법을 알아봅니다.
저장소 생성
가장 먼저 생성해야 할 것은 모델과 상호 작용할 수 있는 새 리포지토리입니다.
repositories
라는 새 폴더를 만듭니다. 내부에서 post.ts
파일을 생성합니다.import { EntityRepository, Repository } from 'typeorm';
import { Post } from '../models/post';
@EntityRepository(Post)
export class PostRepository extends Repository<Post> {}
이 파일은 엔티티와 상호 작용할 수 있도록 리포지토리의 typeORM 기능을 확장합니다.
서비스 만들기
앞에서 배운 것처럼 서비스는 medusa의 논리이므로
post.js
라고 하는 새 사용자 지정 서비스를 만들어 보겠습니다.기본적으로 필요한 요소를 구성해야 합니다.
import { TransactionBaseService } from '@medusajs/medusa';
class PostService extends TransactionBaseService {
constructor({ postRepository, manager }) {
super({ postRepository, manager });
this.postRepository = postRepository;
this.manager_ = manager;
}
}
export default PostService;
그런 다음 필요한 두 가지 기능을 추가하는 작업으로 넘어갑니다.
첫 번째는 새 레코드를 추가하는 생성 기능입니다.
class PostService extends TransactionBaseService {
async create(name) {
const postRepository = this.manager_.getCustomRepository(
this.postRepository
);
const post = await postRepository.create({ name: name });
return await postRepository.save(post);
}
}
여기에 하나의 매개변수를 허용하고 이 엔티티에서 typeORM의
create
함수를 호출하는 create
함수가 있습니다.그런 다음 새로 만든 엔터티를 저장합니다.
엔티티에
BeforeInsert
를 사용했기 때문에 각 항목에 대한 새 ID가 자동으로 생성됩니다.우리가 원하는 두 번째 기능은 데이터베이스의 모든 게시물을 나열하는 목록 기능입니다.
class PostService extends TransactionBaseService {
async list() {
const postRepository = this.manager_.getCustomRepository(
this.postRepository
);
return await postRepository.find();
}
}
이것이 우리 서비스의 전부입니다.
경로
마지막 부분은 이 서비스와 상호 작용할 몇 가지 경로를 만드는 것입니다.
이를 위해
api/index.js
파일을 사용하겠습니다.새 레코드 생성부터 시작하겠습니다. 이를 위해 데이터를 수락할 수 있도록 본문 파서를 활성화해야 합니다.
import { Router } from 'express';
import bodyParser from 'body-parser';
export default () => {
const router = Router();
router.post('/store/post', bodyParser.json(), async (req, res) => {
const postService = req.scope.resolve('postService');
const { name } = req.body;
if (!name) {
res.status(400).json({
msg: 'Name not supplied.',
});
return;
}
const post = await postService.create(name);
console.log(post);
res.json({ msg: 'Post created', id: post.id });
});
return router;
};
이 메서드는 사용자 지정 포스트 서비스를 검색하고 보내는 본문에서 이름 속성을 추출합니다.
없는 경우 400 상태로 사용자에게 알립니다.
지금 이 경로에 게시하면 어떻게 되는지 봅시다.
그렇지 않으면 방금 추가한 생성 함수를 호출합니다.
목록 기능으로 넘어 갑시다.
router.get('/store/post', async (req, res) => {
const postService = req.scope.resolve('postService');
res.json(await postService.list());
});
그리고 그게 다야. 이제 레코드를 가져올 수 있습니다.
읽어주셔서 감사합니다. 연결합시다!
제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나
Reference
이 문제에 관하여(사용자 지정 엔터티와 상호 작용하는 Medusa), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/medusa-interacting-with-our-custom-entity-530e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)