Node.js 多视图目录
我正在使用nestJs框架开发一个MVC应用程序,我使用了hbs模板引擎 根据需要,我必须使用此配置使nestjs能够提供视图:Node.js 多视图目录,node.js,typescript,express,nestjs,Node.js,Typescript,Express,Nestjs,我正在使用nestJs框架开发一个MVC应用程序,我使用了hbs模板引擎 根据需要,我必须使用此配置使nestjs能够提供视图: async function bootstrap() { const app = await NestFactory.create(ApplicationModule); app.useStaticAssets(join(__dirname, '..', 'public')); app.setBaseViewsDir(join(__dirname, '.
async function bootstrap() {
const app = await NestFactory.create(ApplicationModule);
app.useStaticAssets(join(__dirname, '..', 'public'));
app.setBaseViewsDir(join(__dirname, '..', 'views'));
app.setViewEngine('hbs');
await app.listen(3000);
}
此配置假定所有视图都位于一个目录(视图)中,但如果每个模块都有自己的视图呢 从v5.7.0开始
您可以设置目录数组:
app.setBaseViewsDir([
join(__dirname, '..', 'users/views'),
join(__dirname, '..', 'books/views'),
]);
v5.7.0之前 在express中,您可以: 应用程序视图的目录或目录数组。如果是数组,将按照视图在数组中出现的顺序查找视图 但是,nest.js中的键入不允许使用数组,请参阅。我已经创造了一个,这将改变这一点 在合并拉取请求之前,您可以执行以下操作:
app.setBaseViewsDir([
join(__dirname, '..', 'users/views'),
join(__dirname, '..', 'books/views'),
] as any);
一旦合并拉取请求,您就可以像任何应用程序一样删除
,我假设您的应用程序结构与此类似:
src
main.ts
/users
users.controller.ts
/views
my-view.hbs
/books
books.controller.ts
/views
my-view.hbs
然后可以将基本视图目录设置为src
:
app.setBaseViewsDir(__dirname);
并在控制器中引用视图及其相对路径:
@Controller('users')
export class UsersController {
@Render('users/views/my-view')
^^^^^^^^^^^^^^^^^^^
@Get()
async getMyView() {
谢谢它起作用了。但是通过这种方法,所有的“src”文件夹都将公开为公共文件夹,对吗?这安全吗?我认为只有当您设置useStaticAssets
(您不必这样做)时,它才会暴露出来。只有当您通过@Render
@maroodb显式公开视图时,才可以访问视图。这不是您的解决方案?但它不会公开任何文件,除非您在@Render
中显式引用它们。即使您的视图目录位于src目录旁边,您也可以使用相对路径访问src目录中的视图:。/src/my view
,但同样只能使用@Render
。所以没有区别。对不起,这是一次意外的点击:piam无法实现这一点,无法查找view@SaurabhYadav这太笼统了,无法回答。请打开一个新问题并包含相关代码段。另外,请参见上面的另一个答案,也许这对您有用;所有的事情都和你在回答中提到的一样。我还为此创建了一个git回购协议,如果你有这个好的示例,那就太好了!谢谢你的把戏