렌더 엔진
ExpressoTS는 Express.js의 웹 서버 기능을 향상시켜 보기를 렌더링하는 과정을 간소화하여 제공합니다. ExpressoTS는 EJS, PUG 및 Handlebars (HBS)를 포함한 다양한 렌더 엔진을 기본으로 지원하여 개발자들이 추가 구성이 필요하지 않고 각 엔진별로 기본 설정이 제공되므로 쉽게 뷰를 렌더링할 수 있습니다.
지원하는 렌더 엔진
ExpressoTS는 다음과 같은 렌더 엔진을 지원합니다.
- EJS
- PUG
- HBS (핸들바)
핸들바 구성 옵션
export type HandlebarsOptions = {
viewEngine?: string; // 사용할 뷰 엔진
viewsDir?: string; // 뷰 폴더의 경로
partialsDir?: string; // 파셜 폴더의 경로
};
기본 핸들바 구성 옵션
{
viewEngine: "hbs",
viewsDir: <root>/views,
partialsDir: <root>/views/partials,
}
Default Folder structure
Default folder structure for Handlebars:
src
views
|--partials
| |--partial.hbs
|--index.hbs
다른 엔진들은 모두 동일한 구조를 따릅니다. Handlebars에만 특정한 부분 폴더(partials folder)가 있는 점을 제외하고는요.
Handlebars 파일 예시
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HBS 예시</title>
</head>
<body>
<h1>Handlebars에서 안녕하세요</h1>
<p>파셜 렌더링: {> partial}</p>
</body>
</html>
다른 엔진 구성 옵션
Pug 구성 옵션
export type PugOptions = {
viewEngine?: string;
viewsDir?: string;
};
기본 Pug 구성 옵션
{
viewEngine: "pug",
viewsDir: <root>/views,
}
EJS 구성 옵션
export type EjsOptions = {
viewsDir?: string;
viewEngine?: string;
serverOptions?: EjsOptionsServer;
};
기본 EJS 구성 옵션
{
viewEngine: "ejs",
viewsDir: <root>/views,
serverOptions: {
cache: true,
compileDebug: false,
debug: false,
delimiter: "%",
strict: false,
},
}
사용 방법
ExpressoTS를 설정하여 응용 프로그램에서 HBS(핸들바)와 같은 렌더 엔진을 사용하는 방법에 대해 알려드리겠습니다:
app.provider 구성 공급자에서 렌더 엔진을 설정할 수 있습니다:
export class App extends AppExpress {
private middleware: IMiddleware;
private provider: ProviderManager;
constructor() {
super();
this.middleware = container.get<IMiddleware>(Middleware);
this.provider = container.get(ProviderManager);
}
protected configureServices(): void {
// 렌더 엔진을 HBS로 설정합니다.
this.setEngine(Engine.HBS);
this.middleware.setErrorHandler();
}
protected async postServerInitialization(): Promise<void> {
if (this.isDevelopment()) {
this.provider.get(Env).checkAll();
}
}
protected serverShutdown(): void {}
}
만약 렌더 엔진에 사용자 정의 옵션을 전달하려면, 원하는 옵션을 포함한 객체를 setEngine 메서드에 전달하면 됩니다. 예를 들어, 보기 디렉토리를 사용자 정의 경로로 설정하려면 다음과 같이 할 수 있습니다:
this.setEngine<HBS>(Engine.HBS, { viewsDir: <<custom-path>> });
ExpressoTS에서 보기 렌더링하는 방법
ExpressoTS에서 보기를 렌더링하려면 Response 객체에서 제공하는 render 메서드를 사용할 수 있습니다. 아래는 ExpressoTS에서 보기를 렌더링하는 예시입니다:
@Get("/")
root(@response() res: Response) {
res.render("index", { date: new Date(), name: "Random information" });
}
위 예제에서는 Response 객체의 render 메서드가 호출되어 렌더링할 뷰의 이름과 뷰로 전달할 데이터가 포함된 객체가 전달됩니다. 뷰 엔진은 제공된 데이터로 뷰를 렌더링하고 렌더링된 HTML을 클라이언트에게 반환합니다.
Render 데코레이터
@Render 데코레이터는 컨트롤러 메서드에 사용하여 지정된 뷰 엔진을 사용해 뷰를 렌더링하는 데에 사용할 수 있습니다. 다음은 ExpressoTS에서 @Render 데코레이터를 사용하여 뷰를 렌더링하는 방법의 예시입니다:
데코레이터에서 뷰 및 기본 데이터 전달 렌더링
@Get("/")
@Render("index", { date: new Date(), name: "랜덤 정보" })
root() {}
데코레이터에서 뷰만 전달 렌더링
@Get("/")
@Render("index")
root() {
return { date: new Date(), name: "랜덤 정보" };
}
행복한 코딩하세요! 🐎