medusa에서 사용자 지정 서비스 만들기

이제 경로에서 기존 서비스를 사용하는 방법을 알았습니다. 그것을 가져 가자. 다음 단계에서 서비스를 어떻게 만들 수 있는지 살펴보세요.

서비스는 애플리케이션 전체에서 사용할 수 있는 것입니다.

예를 들어 번역 서비스를 추가하고 싶다고 가정해 보겠습니다.
medusa 서버 프로젝트를 열고 src/services 안에 새 파일을 만들어야 합니다.

서비스가 translateService 인 경우 파일 이름을 translate.js (서비스 부분이 없는 파일 이름)로 지정해야 합니다.

메두사에서 서비스 만들기



가장 기본적인 서비스 파일은 다음과 같습니다.

import { TransactionBaseService } from '@medusajs/medusa';

class TranslateService extends TransactionBaseService {
  func() {
    return '';
  }
}

export default TranslateService;


보시다시피 이 서비스는 ‌TransactionBaseService 를 확장하여 모든 기존 서비스 및 기타 서비스에 대한 액세스를 제공합니다.

시험해 볼 수 있도록 모의 데모 함수를 만들어 봅시다.
번역의 경우 일부 매핑 테이블이 필요하지만 지금은 모형으로 만들어 보겠습니다.

const messages = {
  en: {
    title: 'Hello world',
  },
  nl: {
    title: 'Hallo wereld',
  },
};

class TranslateService extends TransactionBaseService {
  translate(msg, locale) {
    return messages[locale][msg] ?? msg;
  }
}


이 번역 기능은 특정 메시지를 제공된 로케일로 번역할 수 있습니다. 일치하는 항목이 없으면 원본 메시지가 반환됩니다.

커스텀 서비스 이용하기



계속해서 이 맞춤 서비스를 어떻게 사용할 수 있는지 살펴보겠습니다.
우리가 이미 좋은 인트로를 가지고 있기 때문에 우리의 custom routes에서 사용할 것입니다.

제목을 얻을 새 경로를 추가해 보겠습니다.

router.get('/store/title', (req, res) => {
  const translateService = req.scope.resolve('translateService');
  const title = translateService.translate('title', 'en');
  res.json({ title });
});


가장 먼저 할 일은 번역 서비스를 검색한 다음 제목에 대한 새 변수를 정의하고 특정 로케일로 제목을 요청하는 것입니다.
그리고 결국, 그것을 반환합니다.

서버를 스풀링하고 경로를 테스트하십시오.



이제 로케일을 nl로 변경하고 다시 시도해 보겠습니다.

const title = translateService.translate('title', 'nl');




번역이 없는 메시지를 요청할 수도 있습니다.

const title = translateService.translate('Products', 'en');




그리고 그게 다야. 이제 medusa에서 완전한 기능을 갖춘 맞춤형 서비스를 제공합니다.

읽어주셔서 감사합니다. 연결합시다!



제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나

좋은 웹페이지 즐겨찾기