NodeJS搭建博客系统(四)使用模版引擎(node+express+ejs做的一个demo)

本文介绍了模板引擎的基本概念及其在MVC架构中的作用,并通过实例展示了如何使用EJS这一流行的JavaScript模板引擎进行页面渲染。
什么是模板引擎

模板引擎(Template Engine)是一个将页面模板和要显示的数据结合起来生成 HTML 页面的工具。如果说上面讲到的 express 中的路由控制方法相当于 MVC 中的控制器的话,那模板引擎就相当于 MVC 中的视图。

模板引擎的功能是将页面模板和要显示的数据结合起来生成 HTML 页面。它既可以运 行在服务器端又可以运行在客户端,大多数时候它都在服务器端直接被解析为 HTML,解析完成后再传输给客户端,因此客户端甚至无法判断页面是否是模板引擎生成的。有时候模板引擎也可以运行在客户端,即浏览器中,典型的代表就是 XSLT,它以 XML 为输入,在客户端生成 HTML 页面。但是由于浏览器兼容性问题,XSLT 并不是很流行。目前的主流还是由服务器运行模板引擎。

在 MVC 架构中,模板引擎包含在服务器端。控制器得到用户请求后,从模型获取数据,调用模板引擎。模板引擎以数据和页面模板为输入,生成 HTML 页面,然后返回给控制器,由控制器交回客户端。


前端常用的有哪些模板引擎


一、jade

jade是超高性能的node JavaScript模板引擎,有着非常强大的API和大量杰出的特性。它主要针对node的服务端。


二、EJS

EJS是模板引擎的一种,也是我们这个教程中使用的模板引擎,因为它使用起来十分简单,而且与 express 集成良好。


三、Handlebars
Handlebars 是 JavaScript 一个语义模板库,通过对view和data的分离来快速构建Web模板。它采用"Logic-less template"(无逻辑模版)的思路,在加载时被预编译,而不是到了客户端执行到代码时再去编译, 这样可以保证模板加载和运行的速度。Handlebars兼容Mustache,你可以在Handlebars中导入Mustache模板。


使用模板引擎


在app.js中通过以下两行代码设置了模板文件的存储位置和使用的模板引擎:


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

注意:我们通过  express -e blog 只是初始化了一个使用 ejs 模板引擎的工程而已,比如 node_modules 下添加了 ejs 模块,views 文件夹下有 index.ejs 。并不是说强制该工程只能使用 ejs 不能使用其他的模板引擎比如 jade,真正指定使用哪个模板引擎的是  app.set('view engine', 'ejs'); 。


在 routes/index.js 中通过调用 res.render() 渲染模版,并将其产生的页面直接返回给客户端。它接受两个参数,第一个是模板的名称,即 views 目录下的模板文件名,扩展名 .ejs 可选。第二个参数是传递给模板的数据对象,用于模板翻译。


打开 views/index.ejs ,内容如下:


index.ejs

<!DOCTYPE html>
<html>
  <head>
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
  </body>
</html>

当我们 res.render('index', { title: 'Express' }); 时,模板引擎会把 <%= title %> 替换成 Express,然后把替换后的页面显示给用户。


渲染后生成的页面代码为:


<!DOCTYPE html>
<html>
  <head>
    <title>Express</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>Express</h1>
    <p>Welcome to Express</p>
  </body>
</html>

注意:我们通过  app.use(express.static(path.join(__dirname, 'public'))) 设置了静态文件目录为 public 文件夹,所以上面代码中的  href='/stylesheets/style.css' 就相当于 href='public/stylesheets/style.css' 。


ejs 的标签系统非常简单,它只有以下三种标签:


● <% code %>:  JavaScript 代码。
● <%= code %>:显示替换过 HTML 特殊字符的内容。
● <%- code %>: 显示原始 HTML 内容。


注意:

<%= code %> 和  <%- code %> 的区别,当变量 code 为普通字符串时,两者没有区别。当 code 比如为  <h1>hello</h1> 这种字符串时, <%= code %> 会原样输出  <h1>hello</h1> ,而  <%- code %> 则会显示 H1 大的 hello 字符串。


一个简单的例子


通过命令新建一个ejs的项目: express -e demo




在index.js里添加如下代码:


var express = require('express');
var router = express.Router();


var items=[{title:'文章1'},{title:'文章2'}];

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index',{title:'文章列表',items:items});
});

router.get('/form', function(req, res, next) {
   res.render('form',{title:'文章列表',message:'fendo8888'});
});

router.post('/form', function(req, res, next) {
  res.redirect('/');
});


module.exports = router;

在views下新建form.ejs添加如下代码:


<!DOCTYPE html>
<html>
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><%= title %></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
	<form method="post" action="/form">
	    <label>new article</label><br>
		<textarea name="text" cols="100" row="5"></textarea>
		<input type="submit" value="pus"></input>
	</form>
	<div><%=message%></div>
  </body>
</html>

index.ejs里添加如下代码:


<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>文章列表页</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1><%= title %></h1>
    <p><a href="/form">发表新文章</a></p>
	<ul>
	   <%items.forEach(function(item){%>
	     <li><%=item.title%></li>
		 <%})%>
	</ul>
  </body>
</html>


运行项目: npm start




访问:http://localhost:3000/




点击发表新文章



点击plus提交时,又回到首页




<think>首先,用户的问题是:“我想创建一个使用Node.js、Express和MongoDB的项目 请问如何使用脚手架工具创建一个Node.js + Express + MongoDB项目”。我需要基于系统级指令和参考引用来回答。 系统级指令: - 所有行内数学表达式用$...$格式。 - 独立公式用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 参考站内引用,但这些引用是关于Node.js、Express、MongoDB、Vue等的内容,不是用户直接需求的一部分。用户的问题是创建Node.js + Express + MongoDB项目,所以我需要从引用中提取相关信息。 从引用中提取关键信息: - 引用[2]:提到使用express-generator脚手架创建项目:`npm install express-generator -g`,然后`express -e demo`,`npm install`。 - 引用[3]:涉及Express和MongoDB的交互,使用mongoose。 - 引用[4]:提到依赖包括express、mongoose等。 - 引用[5]:关于MongoDB用户管理。 用户的问题是如何使用脚手架工具创建一个Node.js + Express + MongoDB项目。引用[2]直接给出了创建Express项目的步骤。 回答结构: - 结构清晰,逐步解决问题。 - 首先,解释什么是脚手架工具。 - 然后,给出具体步骤。 - 最后,添加MongoDB集成部分,因为用户指定了MongoDB。 - 生成相关问题。 步骤大纲: 1. 安装必要的工具:Node.js、npm(假设已安装)。 2. 使用express-generator创建Express项目。 3. 安装依赖。 4. 集成MongoDB(例如,使用mongoose)。 5. 示例代码。 引用标识:在相关部分末尾添加引用标识。 生成相关问题:在回答结束后添加。 使用中文回答。 现在,构建回答: - 开头介绍。 - 步骤分解。 - 代码示例(如果需要)。 - 结尾。 - 相关问题。 确保回答真实可靠:基于标准实践和引用信息。 最终回答: - 标题:创建一个Node.js + Express + MongoDB项目 - 步骤: a. 安装Node.js和npm(如果未安装)。 b. 安装express-generator。 c. 创建项目。 d. 安装项目依赖。 e. 集成MongoDB。 - 添加引用。 - 相关问题。</think>### 创建一个Node.js + Express + MongoDB项目使用脚手架工具快速创建一个Node.js + Express + MongoDB项目,您可以遵循以下步骤。整个过程基于标准开发实践,确保高效可靠。我将逐步引导您完成,包括安装依赖、设置项目结构和集成MongoDB。 #### 步骤 1: 安装必要的全局工具 首先,确保您已安装Node.js(包含npm包管理器)。如果未安装,请从[Node.js官网](https://nodejs.org/)下载。推荐使用LTS版本(如18.x)。然后,安装Express脚手架工具`express-generator`: ```bash # 安装express-generator(全局工具) npm install -g express-generator ``` 此工具简化了Express项目的初始化[^2]。 #### 步骤 2: 使用脚手架创建Express项目 运行脚手架命令来生成项目骨架。这里以创建名为`my-project`的项目为例: ```bash # 创建项目使用-e参数启用EJS模板引擎,可选) express -e my-project ``` 这将自动生成一个基础Express项目,包含以下关键文件: - `app.js`: 主应用文件 - `package.json`: 依赖管理 - `routes/`: 路由目录 - `views/`: 视图模板目录(如果使用了`-e`参数) 进入项目目录: ```bash cd my-project ``` #### 步骤 3: 安装项目依赖 安装Express项目的核心依赖: ```bash # 安装package.json中的依赖 npm install ``` 此时,您已有一个基本的Node.js + Express应用。运行测试服务器: ```bash # 启动开发服务器(默认端口3000) npm start ``` 访问`http://localhost:3000`可看到Express欢迎页面。 #### 步骤 4: 集成MongoDB MongoDB是NoSQL数据库,需单独安装和配置: 1. **安装MongoDB**: - 下载并安装MongoDB Community Server(从[MongoDB官网](https://www.mongodb.com/try/download/community))。 - 启动MongoDB服务(参考官方文档)。 2. **安装Mongoose(ODM库)**: Mongoose简化了Node.js与MongoDB的交互: ```bash # 在项目目录中安装mongoose npm install mongoose ``` 3. **配置数据库连接**: 在`app.js`中添加以下代码以连接MongoDB: ```javascript const mongoose = require('mongoose'); // 连接本地MongoDB数据库(blog为数据库名) mongoose.connect('mongodb://localhost:27017/blog', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB连接成功')) .catch(err => console.error('MongoDB连接失败:', err)); ``` 此配置确保应用启动时自动连接数据库[^3][^4]。 4. **创建模型和路由示例**: - 在项目根目录创建`models/`文件夹,添加模型文件(如`article.js`): ```javascript const mongoose = require('mongoose'); const articleSchema = new mongoose.Schema({ title: String, content: String, date: { type: Date, default: Date.now } }); module.exports = mongoose.model('Article', articleSchema); ``` - 在`routes/index.js`中添加一个测试路由: ```javascript const Article = require('../models/article'); router.get('/api/articles', async (req, res) => { try { const articles = await Article.find(); res.json(articles); } catch (err) { res.status(500).json({ error: err.message }); } }); ``` 此代码实现了一个简单的API端点来获取文章数据[^3]。 #### 步骤 5: 测试和运行 1. 启动MongoDB服务(确保`mongod`进程运行)。 2. 启动Express应用: ```bash npm start ``` 3. 使用工具(如Postman或curl)测试API端点: ```bash curl http://localhost:3000/api/articles ``` 如果返回空数组,表示集成成功。 #### 注意事项 - **安全增强**:在生产环境中,添加身份验证(如引用[5]中的MongoDB用户管理)。 - **热重载**:安装`nodemon`实现代码实时更新: ```bash npm install nodemon --save-dev ``` 然后在`package.json`的`scripts`中添加: ```json "scripts": { "dev": "nodemon ./bin/www" } ``` 使用`npm run dev`启动开发服务器[^2]。 - **项目结构**:脚手架生成的标准结构可扩展性强,适合添加前端框架(如Vue.js)[^1]。 通过以上步骤,您已成功创建了一个基础的Node.js + Express + MongoDB项目。如需进一步优化(如添加身份验证或前端集成),可参考相关文档[^3][^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值