模型 - 视图 - 控制器
模型 - 视图 - 控制器
默认情况下,Nest使用引擎盖下的快速库。因此,关于MVC(模型 - 视图 - 控制器)模式的每个教程都表达了对Nest的关注。首先,让我们使用CLI工具构建一个简单的Nest应用程序:
$ npm i -g @nestjs/cli
$ nest new project
为了创建MVC应用程序,我们必须安装模板引擎:
$ npm install --save hbs
我们决定使用hbs
引擎,但您可以使用符合您要求的任何引擎。安装过程完成后,我们需要使用以下代码配置express实例:
main.ts
JS
import { NestFactory } from '@nestjs/core';
import { join } from 'path';
import { ApplicationModule } from './app.module';
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
}
bootstrap(
我们告诉快递,该public
目录将用于存储静态资产,views
将包含模板,并且hbs
应使用模板引擎来呈现HTML输出。
现在,让我们在其中创建一个views
目录和index.hbs
模板。在模板中,我们将打印message
从控制器传递的内容:
index.hbs
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>App</title>
</head>
<body>
{{ message }}
</body>
</html>
然后,打开app.controller
文件并root()
使用以下代码替换该方法:
app.controller.ts
JS
import { Get, Controller, Render } from '@nestjs/common';
@Controller()
export class AppController {
@Get()
@Render('index')
root() {
return { message: 'Hello world!' };
}
}
提示
事实上,当Nest检测到@Res()
装饰器时,它会注入特定于库的response
对象。
应用程序运行时,打开浏览器并导航到http://localhost:3000/
。你应该看到这条Hello world!
消息。
Fastify
如本章所述,我们可以将任何兼容的HTTP提供程序与Nest一起使用。其中一个是一个令人满意的库。为了创建具有fastify的MVC应用程序,我们必须安装以下包:
$ npm i --save fastify point-of-view handlebars
接下来的步骤几乎涵盖了与快速库(具有小差异)的情况相同的内容。安装过程完成后,我们需要打开main.ts
文件并更新其内容:
main.ts
JS
import { NestFactory, FastifyAdapter } from '@nestjs/core';
import { ApplicationModule } from './app.module';
import { join } from 'path';
async function bootstrap() {
const app = await NestFactory.create(ApplicationModule, new FastifyAdapter()
app.useStaticAssets{
root: join(__dirname, '..', public'),
prefix: '/public/',
}
app.setViewEngine{
engine: {
handlebars: require('handlebars'),
},
templates: join(__dirname, '..', 'views'),
}
await app.listen(3000
}
bootstrap(
API略有不同,但这些方法调用背后的想法保持不变。此外,我们必须确保传递给@Render()
装饰器的模板名称包含文件扩展名。
app.controller.ts
JS
import { Get, Controller, Render } from '@nestjs/common';
@Controller()
export class AppController {
@Get()
@Render('index.hbs')
root() {
return { message: 'Hello world!' };
}
}
应用程序运行时,打开浏览器并导航到http://localhost:3000/
。你应该看到这条Hello world!
消息。