简体   繁体   English

如何使用 Handlebars.js 在 nest.js 中设置默认布局?

[英]How to set up a default layout in nest.js using Handlebars.js?

I'm just starting with nest.js having some previous experience with node and express.我刚开始使用 nest.js,之前对 node 和 express 有一些经验。

I'm trying to set up a default layout for my partials and response renders.我正在尝试为我的部分和响应呈现设置默认布局。 Here's my main.ts :这是我的main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as hbs from 'hbs';

async function bootstrap() {
    const app = await NestFactory.create(AppModule);

    app.setBaseViewsDir(__dirname + '/views');
    hbs.registerPartials(__dirname + '/views/partials');
    app.setViewEngine('hbs');

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

I have a feeling that there should be a default layout defined somewhere in that code but I have no idea how to proceed.我有一种感觉,应该在该代码的某处定义一个默认布局,但我不知道如何继续。 My Google-fu has failed me, so can anyone give me a hand with this?我的 Google-fu 失败了,所以有人可以帮我吗?

You can use您可以使用

app.set('view options', { layout: 'index' });

You still need to use @Render('valid-layout') on all controllers and the provided layout name must be valid.您仍然需要在所有控制器上使用@Render('valid-layout')并且提供的布局名称必须有效。 It will just be overwritten by your default layout.它只会被您的默认布局覆盖。

This worked on a NestExpressApplication:这适用于 NestExpressApplication:

Import handlebars:进口车把:

import * as hbs from 'hbs';
import { join } from 'path';

setting hbs as viewEngine a将 hbs 设置为 viewEngine a

app.setBaseViewsDir(join(__dirname, '..', 'views'));
app.setViewEngine('hbs');
hbs.registerPartials(join(__dirname, '..', '/views/partials'));

Worked also with helpers:还与助手一起工作:

hbs.handlebars.helpers = {
...require('handlebars-helpers')()
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM