我正在使用nestJs框架开发MVC应用,并且使用了hbs模板引擎。
根据documentation,我必须使用此配置使nestjs能够提供视图:
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);
}
此配置假定所有视图都位于一个目录(视图)中,但是如果每个模块都有自己的视图怎么办?
答案 0 :(得分:1)
您可以设置目录数组:
app.setBaseViewsDir([
join(__dirname, '..', 'users/views'),
join(__dirname, '..', 'books/views'),
]);
您可以set an array of base path directories:
应用程序视图的目录或目录数组。如果是数组,则按照在数组中出现的顺序查找视图。
但是,nest.js中的类型不允许使用数组,请参见issue。我创建了一个pull request,它将对此进行更改。
在合并拉取请求之前,您可以执行以下操作:
app.setBaseViewsDir([
join(__dirname, '..', 'users/views'),
join(__dirname, '..', 'books/views'),
] as any);
合并合并请求后,您可以删除as any
。
答案 1 :(得分:0)
我假设您的应用程序结构与此类似:
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() {