Express
Express 框架是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
安装 Express 框架: npm install express --save-dev
Express 框架能做什么?
- 已经封装好了服务器
- 已经封装好了路由
- 已经封装好了中间件
- 已经封装好了网络请求
- .......
Express 框架怎么用 ?
- NPM 安装 express 框架
- 引入 express 模块
- 实例化 express 对象
- 通过对象调用各种方法
注意
在不指定路由判断的情况下,express 会默认渲染 ./public/index.html
文件
const path = require('path');
// 使用 Express 框架
// Express 框架是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
// 引入框架
let express = require('express');
//设置允许跨域访问该服务.
app.all('*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
//Access-Control-Allow-Headers ,可根据浏览器的F12查看,把对应的粘贴在这里就行
res.header('Access-Control-Allow-Headers', 'Content-Type');
res.header('Access-Control-Allow-Methods', '*');
res.header('Content-Type', 'application/json;charset=utf-8');
next();
});
// 实例化 express 对象
let app = express();
// 通过对象调用方法
// 根据用户请求的地址返回对应的数据
// get() 根据用户请求的路由路径返回对应的数据
// 参数1:路由地址
// 参数2:回调函数,参数为 请求 和 响应
app.get('/', (request, response) => {
// '/' 主页的路由
console.log(request.url);
// send() 响应的内容,参数支持 HTML 语法
// response.send('<h1>欢迎来到 Express 框架!</h1>');
// sendFile() 响应的内容,参数为 html 文件的绝对路径
response.sendFile(path.join(__dirname, '/public', 'index.html'));
});
app.get('/about.html', (request, response) => {
console.log(request.url);
// '/about' 关于页面的路由
// response.send('关于我们');
response.sendFile(path.join(__dirname, '/public', 'about.html'));
})
// 路由参数
app.get('/profile/:id', (req, res) => {
res.send(`您所访问的路由参数为:${req.params.id}`);
});
// 设置了上面的路由参数后,在地址栏输入:http://localhost:5000/profile/news
// 页面中的结果是: 您所访问的路由参数为:news
// 监听服务器的端口号
app.listen(5000, () => console.log('服务器已经在:http://localhost:5000/ 启动'));
EJS 模板引擎
EJS 是一套简单的模板语言,可以利用普通的 JavaScript 代码生成 HTML 页面。
安装 ejs: npm install ejs --save
其他模板引擎
- jade
- handlebars
- hogan
EJS 模板引擎的特点
- 快速编译和渲染
- 简单的模板标签
- 支持浏览器端和服务器端
- 支持 express 视图系统
EJS 模板引擎的使用
- 所有的
js
代码必须放在<% %>
里面; - 逻辑代码放在
<% %>
中,取出的值放在<%= %>
中; - 每一行逻辑代码都需要放在
<% %>
标签中
示例:
<ul>
<% for(item of datas ) { %>
<li><%= item %></li>
<% } %>
</ul>
在 Express 框架中使用 EJS 模板引擎
- 配置视图引擎为
ejs
- 在引入页面时使用
response.render()
方法
const path = require('path');
// 使用 Express 框架
// Express 框架是基于 Node.js 平台,快速、开放、极简的 Web 开发框架。
// 引入框架
let express = require('express');
// 实例化 express 对象
let app = express();
// 配置视图引擎为 ejs
app.set('view engine', 'ejs');
// 通过对象调用方法
// 根据用户请求的地址返回对应的数据
// get() 根据用户请求的路由路径返回对应的数据
// 参数1:路由地址
// 参数2:回调函数,参数为 请求 和 响应
app.get('/', (request, response) => {
// '/' 主页的路由
console.log(request.url);
// send() 响应的内容,参数支持 HTML 语法
// response.send('<h1>欢迎来到 Express 框架!</h1>');
// sendFile() 响应的内容,参数为 html 文件的绝对路径
response.sendFile(path.join(__dirname, '/public', 'index.html'));
});
app.get('/about.html', (request, response) => {
console.log(request.url);
// '/about' 关于页面的路由
// response.send('关于我们');
response.sendFile(path.join(__dirname, '/public', 'about.html'));
})
// 路由参数
app.get('/profile/:id', (req, res) => {
// render() 渲染模板引擎文件,该方法会自动在同目录下的 views 目录下找到指定的文件,因此不需要给路径而只需给一个文件名即可
// 第二个参数:向模板引擎文件传递的数据,必须是一个对象
let data = [
{ name: ['Summer', 'Sunny', 'Suxi'], age: 25 },
{ name: ['Bob', 'Bucky', 'Babu'], age: 30 },
{name: ['Jack', 'Jenny' ], age: 35 }
];
res.render('profile', {websiteName: req.params.id, datas: data});
});
// 监听服务器的端口号
app.listen(5000, () => console.log('服务器已经在:http://localhost:5000/ 启动'));
EJS 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页</title>
</head>
<body>
<header>
<a href="/">主页</a>
<a href="/about.html">关于</a>
</header>
<main>
<section>
<h1>这是一个 <%= websiteName %> 页面!</h1>
<ul>
<% for (data of datas) { %>
<li><strong>Name:</strong>
<ul>
<% for (name of data.name) { %>
<li><%= name %></li>
<% } %>
</ul>
</li>
<li><strong>Age:</strong> <%= data.age %></li>
<% } %>
</ul>
</section>
</main>
</body>
</html>
Express & EJS 项目示例
创建公共模板
- 在项目目录中创建
assets
文件夹 - 在
assets
文件夹下创建公共模板,例如:assets/nav.ejs
- 在
ejs
文件中引入模板,只需在需要引入的地方:<%- include('../assets/nav.ejs') %>
这样在 ejs 中通过 link
标签引入的外部 css
文件就可以使用了
创建公共模块代码
文件结构
nodeTest (项目主目录)
-assets (外部 css 样式表目录)
-style.css (外部样式表)
-public ( ejs 公共模板文件的目录)
-nav.ejs ( 导航公共模板)
-views ( ejs 页面文件的目录)
-index.ejs (主页)
-index.js ( express 框架配置文件)
express 框架文件:index.js
// 引入框架
let express = require('express');
// 实例化 express 对象
let app = express();
// 配置视图引擎为 ejs
app.set('view engine', 'ejs');
// 让服务器能够识别外部 css 样式表
// 使用中间件 use() ,第一个参数是要处理的目录,
// 第二个参数使用 express.static 将指定目录下的静态文件转为模块
// 这样就能够识别 assets 目录下的 css 文件了
app.use('/assets', express.static('assets'));
// 通过对象调用方法
// 根据用户请求的地址返回对应的数据
// get() 根据用户请求的路由路径返回对应的数据
// 参数1:路由地址
// 参数2:回调函数,参数为 请求 和 响应
app.get('/', (request, response) => {
// '/' 主页的路由
response.render('index');
});
// 监听服务器的端口号
app.listen(5000, () => console.log('服务器已经在:http://localhost:5000/ 启动'));
html 主页:index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<!-- 引入公共导航模板 -->
<%- include('../public/nav.ejs') %>
<main>
<h1>Node.js http 服务器已正常启动</h1>
</main>
</body>
</html>
公共导航模板文件:nav.ejs
<!-- 公共模板文件只能有一个根标签 -->
<nav>
<a href="/">主页</a>
<a href="/about.html">关于</a>
<div class="route">
<input type="text" id="profile" placeholder="myWebsite"><a id="router" href="#">跳转路由参数</a>
</div>
</nav>