You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS框架中正确配置使用EJS模板引擎?

NestJS 配置EJS模板引擎方案

你找不到.set()方法的核心原因是:默认创建的Nest应用实例是通用类型,不包含Express平台的扩展方法,只要给实例指定Express平台对应的类型,就可以直接使用和原生Express一致的API配置模板引擎。

步骤1:安装依赖

默认Nest项目基于Express平台,只需要安装ejs包即可:

npm install ejs

步骤2:修改入口文件配置

在main.ts中引入Express平台对应的应用类型,创建实例时指定泛型,再完成模板引擎配置:

import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';
import { join } from 'path';

async function bootstrap() {
  // 指定实例类型为NestExpressApplication,即可获取Express平台的所有扩展方法
  const app = await NestFactory.create<NestExpressApplication>(AppModule);

  // 可选:配置静态资源目录,存放css、js、图片等静态文件
  app.useStaticAssets(join(__dirname, '..', 'public'));
  // 配置ejs模板文件的存放目录
  app.setBaseViewsDir(join(__dirname, '..', 'views'));
  // 设置模板引擎为ejs,和原生Express写法完全一致
  app.setViewEngine('ejs');

  await app.listen(3000);
}
bootstrap();

步骤3:编写模板与路由渲染

  • 在项目根目录新建views文件夹,所有.ejs后缀的模板文件都放在这个目录下,比如新建index.ejs:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title><%= title %></title>
</head>
<body>
  <h1><%= content %></h1>
</body>
</html>
  • 在Controller中使用@Render()装饰器指定要渲染的模板,方法返回值会作为模板变量传入:
import { Controller, Get, Render } from '@nestjs/common';

@Controller()
export class AppController {
  @Get()
  @Render('index') // 对应views/index.ejs,无需写文件后缀
  getHomePage() {
    return {
      title: 'NestJS EJS测试页',
      content: 'EJS模板在NestJS中配置成功'
    };
  }
}

额外配置说明

  • 如果需要自定义EJS的配置项,比如修改分隔符、开启渲染缓存,可以通过app.set('view options', { delimiter: '?', cache: true })传入,和原生Express配置逻辑完全一致
  • 如果你使用Fastify作为底层HTTP平台,上述配置不适用,需要安装@fastify/view插件完成注册,默认初始化的Nest项目均为Express平台,直接使用以上方案即可

内容的提问来源于stack exchange,提问作者Alessandro Rhomberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:00:50