logologo
시작
가이드
개발
플러그인
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
시작
가이드
개발
플러그인
API
logologo

빠른 시작

플러그인 개발 개요
첫 플러그인 작성
프로젝트 디렉토리 구조

서버사이드 개발

개요
Plugin 플러그인
Collections 데이터 테이블
Database 데이터베이스 작업
DataSourceManager 데이터 소스 관리
ResourceManager 리소스 관리
ACL 권한 제어
Middleware 미들웨어
Cache 캐시
Event 이벤트
Context 요청 컨텍스트
Migration 업그레이드 스크립트
Logger 로그
I18n 국제화
Command 커맨드 라인
CronJobManager 예약 작업 관리
Test 테스트

클라이언트사이드 개발

개요
Plugin 플러그인
Context 컨텍스트
Router 라우터
ACL 권한 제어
DataSourceManager 데이터 소스 관리
Resource 리소스
Request 요청
Styles & Themes 스타일 & 테마
Logger 로그
I18n 국제화
Test 테스트

기타

플러그인 업그레이드 가이드
언어 목록
의존성 관리
빌드
Previous PageEvent 이벤트
Next PageMigration 업그레이드 스크립트
TIP

이 문서는 AI로 번역되었습니다. 부정확한 내용이 있을 경우 영어 버전을 참조하세요

#Context 컨텍스트

NocoBase에서는 모든 요청이 ctx 객체를 생성하며, 이 객체는 Context의 인스턴스입니다. Context는 요청 및 응답 정보를 캡슐화하고, 동시에 데이터베이스 접근, 캐시 작업, 권한 관리, 국제화, 로깅 등 NocoBase 고유의 다양한 기능을 제공합니다.

NocoBase의 Application은 Koa를 기반으로 구현되었기 때문에, ctx는 본질적으로 Koa Context입니다. 하지만 NocoBase는 여기에 풍부한 API를 확장하여 개발자가 미들웨어(Middleware)와 액션(Action)에서 비즈니스 로직을 편리하게 처리할 수 있도록 합니다. 각 요청은 독립적인 ctx를 가지며, 요청 간의 데이터 격리 및 보안을 보장합니다.

#ctx.action

ctx.action은 현재 요청에서 실행되는 액션(Action)에 대한 접근을 제공합니다. 다음과 같은 속성을 포함합니다:

  • ctx.action.params
  • ctx.action.actionName
  • ctx.action.resourceName
resourceManager.use(async (ctx) => {
  console.log(ctx.action.actionName); // 현재 액션(Action) 이름 출력
  ctx.body = `Action: ${ctx.action.actionName}`;
});

#ctx.i18n & ctx.t()

국제화(i18n)를 지원합니다.

  • ctx.i18n은 언어 환경 정보를 제공합니다.
  • ctx.t()는 언어에 따라 문자열을 번역하는 데 사용됩니다.
resourceManager.use(async (ctx) => {
  const msg = ctx.t('Hello World'); // 요청 언어에 따라 번역된 문자열 반환
  ctx.body = msg;
});

#ctx.db

ctx.db는 데이터베이스 접근 인터페이스를 제공하여 모델을 직접 조작하고 쿼리를 실행할 수 있습니다.

resourceManager.use(async (ctx) => {
  const users = await ctx.db.getRepository('users').find();
  ctx.body = users;
});

#ctx.cache

ctx.cache는 캐시 작업을 제공합니다. 캐시 읽기 및 쓰기를 지원하며, 주로 데이터 접근 속도를 높이거나 임시 상태를 저장하는 데 사용됩니다.

resourceManager.use(async (ctx) => {
  await ctx.cache.set('key', 'value', 60); // 60초 동안 캐시
  const val = await ctx.cache.get('key');
  ctx.body = val;
});

#ctx.app

ctx.app은 NocoBase 애플리케이션 인스턴스입니다. 전역 설정, 플러그인(Plugin) 및 서비스에 접근할 수 있습니다.

resourceManager.use(async (ctx) => {
  console.log(ctx.app);
  ctx.body = 'Check console for app';
});

#ctx.auth.user

ctx.auth.user는 현재 인증된 사용자 정보를 가져옵니다. 권한 확인 또는 비즈니스 로직에서 사용하기에 적합합니다.

resourceManager.use(async (ctx) => {
  if (!ctx.auth.user) {
    ctx.throw(401, 'Unauthorized');
  }
  ctx.body = `Hello ${ctx.auth.user.username}`;
});

#ctx.state.currentRoles

ctx.state는 미들웨어 체인에서 데이터를 공유하는 데 사용됩니다.

resourceManager.use(async (ctx) => {
  ctx.body = `Current User: ${ctx.state.currentRoles.join(',')}`;
});

#ctx.logger

ctx.logger는 로깅 기능을 제공하며, 다단계 로그 출력을 지원합니다.

resourceManager.use(async (ctx) => {
  ctx.logger.info('Processing request for:', ctx.path);
  ctx.body = 'Logged successfully';
});

#ctx.permission & ctx.can()

ctx.permission은 권한 관리에 사용되며, ctx.can()은 현재 사용자가 특정 작업을 실행할 권한이 있는지 확인하는 데 사용됩니다.

resourceManager.use(async (ctx) => {
  const canEdit = await ctx.can('edit', 'posts');
  if (!canEdit) {
    ctx.throw(403, 'Forbidden');
  }
  ctx.body = 'You have permission to edit posts';
});

#요약

  • 각 요청은 독립적인 ctx 객체에 해당합니다.
  • ctx는 Koa Context의 확장으로, NocoBase 기능을 통합합니다.
  • 자주 사용되는 속성은 ctx.db, ctx.cache, ctx.auth, ctx.state, ctx.logger, ctx.can(), ctx.t() 등이 있습니다.
  • 미들웨어(Middleware)와 액션(Action)에서 ctx를 사용하면 요청, 응답, 권한, 로그 및 데이터베이스를 편리하게 조작할 수 있습니다.