1.Express 简介
Express 是一个简洁、灵活的 Node.js Web 应用开发框架。
具有如下的特点:
- 易上手:Express 对 Web 开发相关的模块进行了适度的封装,屏蔽了大量复杂繁琐的技术细节,让开发者只需要专注于业务逻辑的开发,极大的降低了入门和学习的成本。
- 高性能:Express 仅在 Web 应用相关的 Node 模块上进行了适度的封装和扩展,较大程度避免了过度封装导致的性能损耗。
- 扩展性强:基于中间件的开发模式,使得 Express 应用的扩展、模块拆分非常简单,既灵活,扩展性又强。
2.安装 Express
在桌面上新建了一个 app 的目录作为项目根目录,终端切换到该目录下,输入如下命令:
该命令对项目目录进行初始化。初始化完毕以后,使用如下命令进行 Express 框架的安装:npm i express
3.搭建服务器
//引入express模块
const express = require("express");
//创建服务器实例
const app = express();
//服务器在8888端口监听
app.listen(8888, function () {
console.log("服务器已经启动");
});
//处理http请求
app.get("/add/:name/:id/:age", (request, response) => {
//这里的参数request,response是经过express封装过的
//获取请求头
console.log("请求头:" + request.headers);
//获取请求路径
console.log("请求路径:" + request.path);
//获取请求参数
console.log(request.query);
//获取请求IP
console.log("请求IP:" + request.ip);
//获取URL地址
console.log("请求URL:" + request.url);
//获取动态参数
console.log(request.params);
//服务器响应发送消息给客户端
//response.send("<h1>hello express!</h1>");
//服务器响应跳转
//response.status(302).header("location","http://www.yanhongzhi.com").end();
//response.status(302).location("http://www.yanhongzhi.com").end();
//response.redirect("http://www.yanhongzhi.com");
});
//处理任意请求
app.get("*",(req,res)=>{
console.log("请求地址:" + req.path);
})
4.使用nodemon插件
避免重启服务器
下载:
npm i -d nodemon
启动
npx nodemon ./server.js
可以在package.json中修改script配置,让启动更加简单
package.json
可以添加一个nodemon.json的配置文件,让nodemon使用起来更加方便
nodemon.json
{
"watch":["*.js","*.json"],
"ignore":["package*.json","nodemon.json","node_modules"],
"delay":2000,
"restartable":"rs"
}
- watch:监听哪些文件修改后重启服务器
- ignore:哪些文件修改后不触发服务器的重启
- delay:修改文件后,延迟多少毫秒重启服务器
- restartable:在命令行输入rs,可以手动重启
6.express自带中间件
比如在工程根目录创建public文件夹,添加如下静态页面
//引入express模块
const express = require("express");
//新版本的express中不再需要单独引入
//const bodyParser = require("body-parser");
//创建服务器实例
const app = express();
//获取node路径模块
const path = require("path");
//拼接静态文件路径
const staticRoot = path.resolve(__dirname, "./public");
//服务器在8888端口监听
app.listen(8888, function () {
console.log("服务器已经启动");
});
//添加静态文件中间件
app.use(express.static(staticRoot));
// 解析我们通常的form表单数据,也就是请求头中包含这样的信息:
// Content-Type: application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));
//解析 json数据
app.use(express.json());
//获取页面post请求数据
app.post("/api/student", (req, res) => {
console.log("====>post");
console.log(req.body);
});
7.postman发送json请求
8.route()
方法
router 实例对象的route()
方法,可以接受访问路径作为参数。
具体示例如下:
router.js
//引入express模块
const express = require("express");
//创建服务器实例
const app = express();
//获取router对象
const router = express.Router();
router.get("/welcome",(req,res)=>{
res.send("首页");
});
router.get("/user",(req,res)=>{
res.send("用户页面");
})
router.route('/api')
.post(function (req, res) {
res.send('/api post 方式的请求');
})
.get(function (req, res) {
res.send('/api get 方式的请求');
});
app.use("/app",router);
//服务器在8888端口监听
app.listen(8888, function () {
console.log("服务器已经启动");
});
9.express脚手架
首先,我们需要全局安装这个工具,如下:
npm install express-generator -g
注意:全局安装是安装在整个计算机中,所以,安装一次即可,无需每次创建工程都要去安装一次
创建工程:
express app
安装相关的依赖包,终端切换到项目根目录下,键入
npm install
图显示为:
现在,在终端输入npm start
来启动这个应用:
然后,在浏览器访问http://127.0.0.1:3000/
就可以看到这个应用了:
10.三层架构
- 表示层: 主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
- 业务逻辑层: 主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
- 数据访问层: 主要看数据层里面有没有包含逻辑处理,实际上它的各个函数主要完成各个对数据文件的操作。而不必管其他操作。
RESTful
RESTful是一种常见的REST应用,是遵循REST风格的web服务,REST式的web服务是一种ROA(面向资源的架构)。
简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。
REST资源操作
11.同源策略和跨域
跨域的解决方法
- JSONP
- CORS(跨域资源共享)
-
cors中间件
CORS是基于http1.1的一种跨域解决方案,它的全称是Cross-Origin Resource Sharing,跨域资源共享。
它的总体思路是:如果浏览器要跨域访问服务器的资源,需要获得服务器的允许
安装
npm i cors
引入
const cors = require(“cors”);
app.use(cors());
如果没有特殊处理的话,我们自己不需要写任何多余的代码,所有的接口都能允许跨域了当然也可以做一些特殊处理,比如单独设置接口跨域,设置白名单等等,这些就不再一一说明,可以自行到 https://www.npmjs.com/package/cors 学习