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

NestJS Monorepo微服务EJS视图查找失败问题求助

问题排查与解决方案

核心问题分析

报错显示在dist/apps/views找不到index.ejs,本质是两个问题:

  1. TypeScript编译时仅处理.ts文件,.ejs模板未被同步到dist目录对应位置
  2. 运行时的路径配置基于编译后的文件位置,原相对路径指向错误

具体解决步骤

1. 配置Nest CLI自动复制模板文件

在项目根目录的nest-cli.json中,针对fin服务添加静态资源复制规则,确保编译时把.ejs文件同步到dist目录:

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "monorepo": true,
  "root": "apps/fin",
  "projects": {
    "fin": {
      "root": "apps/fin",
      "sourceRoot": "apps/fin/src",
      "compilerOptions": {
        "assets": ["views/**/*.ejs"],
        "watchAssets": true
      }
    }
  }
}
  • assets:指定要复制的静态资源路径,views/**/*.ejs表示匹配views目录下所有.ejs文件
  • watchAssets:开启后,开发模式下修改模板文件会自动同步到dist,无需重启服务

2. 修正视图目录的路径配置

原代码中resolve('../src/views')是基于源码位置的相对路径,但编译后main.js位于dist/apps/fin/src目录,相对路径指向会出错。改用__dirname(当前文件的绝对路径)来定位视图目录:

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

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  // 修正静态资源路径(如果有assets目录的话)
  app.useStaticAssets(resolve(__dirname, 'assets'));
  // 修正视图目录路径
  app.setBaseViewsDir(resolve(__dirname, 'views'));
  app.setViewEngine('ejs');
  await app.listen(6006);
  console.log(`Fin PEN started successfully on Port 6006`);
}
bootstrap();

__dirname会指向编译后main.js所在的dist/apps/fin/src目录,搭配resolve就能准确找到复制过来的views文件夹。

3. 验证配置

执行编译命令:

npm run build

查看dist/apps/fin/src目录下是否存在views文件夹及index.ejs文件,确认文件已被正确复制后,启动服务:

npm run start:dev fin

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:30:57