NestJS使用模板引擎ejs

在這里插入圖片描述

模板引擎?

模板引擎是一種用于生成動態內容的工具,它通過將預定義的模板與特定數據結合,來生成最終的輸出。?

在NodeJS開發中,我們會使用模板引擎來渲染一些常用的頁面,比如渲染代表404的Not Found 頁面,502的Bad Request頁面等,在部分后端渲染的項目中,也會使用模板引擎來渲染頁面,而不會用VUE或者是React等前端框架。?

本文章會用Ejs模板引擎作為例子,在使用了NestJS的項目中,渲染一個?list頁面。

配置Ejs?

首先第一步,必須得是在我們的項目 中引入Ejs模板引擎

npm install ejs

接著,在我們的目錄中創建一個folder,個人會將其命名為views,作用是存放我們的不同的模板,在此文件夾中,我會在此創建一個名為List.ejs的?文件,作用是顯示出列表數據。
即然有了存放ejs的地方,那么我們就需要在我們的項目中設置該文件夾內的模板供我們使用,因為是全局,所以我們會在main.ts中去設置?

  //ejsapp.setBaseViewsDir('views');app.setViewEngine('ejs');

需要注意的是,由于本地創建的?NestJS項目中。app沒有具體的類型,可能會導致報錯說app這個instance上沒有這兩個方法,所以建議如下操作,替換掉創建?app的方法。

  const app = await NestFactory.create<NestExpressApplication>(AppModule);

整個main.ts的代碼如下

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
?
async function bootstrap() {const app = await NestFactory.create<NestExpressApplication>(AppModule);
?//ejsapp.setBaseViewsDir('views');app.setViewEngine('ejs');
?await app.listen(3000);
}
bootstrap();

使用Ejs

配置之后,我們手動使用如下指令創建一個新的controller,在新生成的控制類中寫我們的代碼。

nest g controller list

自己手動寫一個最簡單的get請求的處理代碼

import { Controller, Get } from '@nestjs/common';
?
@Controller('article')
export class ListController {@Get('list/index')getList(): string {return '獲取列表成功';}
}
?

接下來,我們需要將其設置為返回一個列表信息的頁面,所以我們需要先配置@Render這個注釋器?,并且在代碼的最后返回定制好的數據,即下面的代碼

import { Controller, Get, Render } from '@nestjs/common';
?
@Controller('list')
export class ListController {@Render('list')@Get('index')getList(): { list: { id: number; name: string }[] } {return {list: [{ id: 1, name: 'name1' },{ id: 2, name: 'name2' },],};}
}

?
上述的代碼中,模擬了從數據庫中查詢出數據,并且將其返回到我們的Ejs模板中去渲染。

同樣的,我們需要在我們的Ejs文件中去接受并渲染數據,對?list參數做for循環渲染。代碼如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><ul><% for (var i = 0; i < list.length; i++) { %><li><%= list[i].name %></li><% } %></ul>
</body>
</html>

?效果如下:

在這里插入圖片描述

使用Ejs有一個好處,當你只想做一個很少頁面的項目時候,你可以使用模板引擎來減少前端的工作量,且?能很好的保護你的代碼。

在這里插入圖片描述

?
個人公眾號,求關注,不定時更新前端技術文章

公眾號文章求關注

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716536.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

異常值檢測-值域法 頭歌代碼解釋

這關做得不是很明白&#xff0c;如果有清楚的同志可以在評論區里面討論 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import LocalOutlierFactor # 導入數據 abc pd.read_csv(deaths.csv) ## 只分析其中的Population和L…

C語言對類型的轉換

C語言對類型的轉換 文章目錄 C語言對類型的轉換整形提升和截斷整形提升整形提升規則整形提升的意義 截斷截斷規則 算數轉換 我們都知道&#xff0c;C語言中內置了多種整形類型&#xff0c;占用空間從大到小&#xff0c;基本滿足各類使用場景&#xff08;比如超長數字的運算就不…

【【C語言簡單小題學習-1】】

實現九九乘法表 // 輸出乘法口訣表 int main() {int i 0;int j 0;for (i 1; i < 9; i){for (j 1; j < i;j)printf("%d*%d%d ", i , j, i*j);printf("\n"); }return 0; }猜數字的游戲設計 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdi…

源碼視角,vue3為什么推薦用ref,而不是reactive

ref 和 reactive 是 Vue3 中實現響應式數據的核心 API。ref 用于包裝基本數據類型&#xff0c;而 reactive 用于處理對象和數組。盡管 reactive 似乎更適合處理對象&#xff0c;但 Vue3 官方文檔更推薦使用 ref。 我的想法&#xff0c;ref就是比reactive好用&#xff0c;官方也…

Java 中對包含關系的判斷

本文將為您詳細講解 Java 中對包含關系的判斷&#xff0c;包括數組、字符串等&#xff0c;并提供相應的代碼例子。 1. 數組包含關系判斷 在 Java 中&#xff0c;數組包含關系判斷通常使用循環來實現。以下是幾種常見的判斷方法&#xff1a; 示例 1&#xff1a;使用 for…

Unity曲柄滑塊四桿機構運動計算

一、運動效果 二、機構的介紹 曲柄長度&#xff1a;a&#xff0c;線段AB長度 連桿長度&#xff1a;b&#xff0c;線段BC長度 偏心距離&#xff1a;e&#xff0c;滑塊軌跡與曲柄中心點A的垂直距離 三、已知點A點B和e的值&#xff0c;計算C點的位置 1、計算s的值 var h math.…

通過多進程并發方式(fork)實現服務器(注意要回收子進程)

以下內容為視頻學習記錄。 1、父進程accept后返回的文件描述符為cfd以及用于創建連接的lfd; 調用fork()創建子進程后&#xff0c;子進程繼承cfd,lfd&#xff0c;通過該cfd與連接過來的客戶端通信,lfd對子進程來說沒用&#xff0c;可以直接close(lfd); 對于父進程來說&#x…

雙非二本找實習前的準備day4

學習目標&#xff1a; 每天2-3到簡單sql&#xff08;刷完即止&#xff09;&#xff0c;每天復習代碼隨想錄上的題目3道算法&#xff08;時間充足可以繼續&#xff09;&#xff0c;背誦的八股的問題也在這里記錄了 今日碎碎念&#xff1a; 1&#xff09;偶爾還是貪玩游戲&…

Vue中的計算屬性和方法有什么區別?

Vue.js是一款流行的JavaScript前端框架&#xff0c;提供了豐富的功能和便捷的開發方式。在Vue中&#xff0c;計算屬性和方法是常用的兩種方式來處理數據和邏輯。但它們之間存在一些區別&#xff0c;本文將詳細介紹Vue中計算屬性和方法的區別&#xff0c;并通過示例代碼加深理解…

183896-00-6,Biotin-C3-PEG3-C3-NH2,可以選擇性降解靶蛋白

您好&#xff0c;歡迎來到新研之家 文章關鍵詞&#xff1a;183896-00-6&#xff0c;Biotin-C3-PEG3-C3-NH2&#xff0c;Biotin-C3-PEG3-C3-amine&#xff0c;生物素-C3-PEG3-C3-胺 一、基本信息 【產品簡介】&#xff1a;Biotin-PEG3-C3-NH2是一種PROTAC linker&#xff0c;…

381. 有線電視網絡(網絡流,最小割,《算法競賽進階指南》)

381. 有線電視網絡 - AcWing題庫 給定一張 n 個點 m 條邊的無向圖&#xff0c;求最少去掉多少個點&#xff0c;可以使圖不連通。 如果不管去掉多少個點&#xff0c;都無法使原圖不連通&#xff0c;則直接返回 n。 輸入格式 輸入包含多組測試數據。 每組數據占一行&#xf…

Python推導式大全與實戰:精通列表、字典、集合和生成器推導式【第115篇—python:推導式】

Python推導式大全與實戰&#xff1a;精通列表、字典、集合和生成器推導式 Python語言以其簡潔、優雅的語法而聞名&#xff0c;其中推導式是其獨特之處之一。推導式是一種在一行代碼中構建數據結構的強大方式&#xff0c;它涵蓋了列表、字典、集合和生成器。本篇博客將全面介紹…

YOLOv8實例分割實戰:ONNX模型轉換及TensorRT部署

課程鏈接&#xff1a;https://edu.csdn.net/course/detail/39320 PyTorch版的YOLOv8支持高性能的實時實例分割。 TensorRT是針對英偉達GPU的加速工具。 ONNX &#xff08;Open Neural Network Exchange&#xff09; 作為一個開放的網絡模型中間表示&#xff08;IR&#xff0…

Redis命令大全

通用命令 KEYS pattern&#xff1a;查找所有符合給定模式&#xff08;pattern&#xff09;的 key。EXISTS key&#xff1a;檢查指定 key 是否存在。TYPE key&#xff1a;返回指定 key 的數據類型。DEL key [key …]&#xff1a;刪除指定的 key。RENAME key newkey&#xff1a;…

spring boot 修復 Spring Framework URL解析不當漏洞(CVE-2024-22243)

漏洞描述 當應用程序使用UriComponentsBuilder來解析外部提供的URL&#xff08;如通過查詢參數&#xff09;并對解析的URL的主機執行驗證檢查時可能容易受到Open重定向攻擊和SSRF攻擊&#xff0c;導致網絡釣魚和內部網絡探測等。 受影響產品或系統 6.1.0 < Spring Framew…

Vue項目的快速搭建

Vue項目的快速搭建 一、下載并安裝node.js二、安裝Vue腳手架三、創建vue項目四、項目啟動五、VS Code下載安裝 一、下載并安裝node.js 首先確保已經安裝了Node.js。如果沒有安裝&#xff0c;可以去官網&#xff08;https://nodejs.org/&#xff09;下載并安裝最新版本的Node.j…

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示應用

基于STC12C5A60S2系列1T 8051單片機的TM1638鍵盤數碼管模塊的數碼管顯示應用 STC12C5A60S2系列1T 8051單片機管腳圖STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式及配置STC12C5A60S2系列1T 8051單片機I/O口各種不同工作模式介紹TM1638鍵盤數碼管模塊概述TM1638鍵盤數碼管…

mybatis-傳遞參數的方式

mybatis 傳遞參數的7種方法 在實際開發過程中&#xff0c;增刪改查操作都要涉及到請求參數的傳遞&#xff0c;今天這節就集中講下在mybatis中傳遞參數的7中方法 單個參數的傳遞很簡單沒有什么好將的&#xff0c;這里主要說下多個參數的傳遞 1、第一種方式 匿名參數 順序傳遞…

[electron]窗口 BrowserWindow

優雅的顯示窗口 const {app, BrowserWindow} require(electron);function createMainwindow(){const mainwindow new BrowserWindow({x: 300,y: 400,width: 600,height: 600,});mainwindow.loadFile(index.html); }app.on(ready, ()>{createMainwindow(); });對于這樣的代…

前端發起請求,后端模型需處理很久,怎樣設置前端直接完成請求響應,后端計算完在返回結果給前端?

在這種情況下&#xff0c;可以采用異步處理的方式來解決。具體步驟如下&#xff1a; 前端發起請求&#xff1a;前端向后端發送請求&#xff0c;但是不等待后端處理完成而是立即得到響應。 后端異步處理&#xff1a;后端接收到請求后&#xff0c;不立即進行處理&#xff0c;而是…