一、简介
- Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
- Express 简单来说就是运行在Node 平台中的服务器模块,通过Express可以很容易的通过HTTP协议向用户返回静态或动态页面。
- Express的特点: 精简、灵活、适合各种WEB应用程序
二、安装express
npm i express --save //安装并添加到项目依赖中
三、使用express
//引入express
var express = require("express");
//创建一个应用对象
//application 代表整个web应用
//一个应用中只能有一个app对象
var app = express();
//配置静态资源 可以被外部访问
app.use(express.static("public"));
//启动服务器并监听3000端口 端口自己设置
app.listen(3000 , function () {
console.log("服务器已经成功启动~~~");
});
当在浏览器中输入http://localhost:3000 就可以访问服务器了,
四、路由(route)
- 路由是将请求(由 URL 和 HTTP 方法指定)路由到处理它们的代码去的一种机制
- 通过路由可以将浏览器发送的请求地址和Node中的函数进行关联(映射),通过函数可以来获取用户发送的请求,或向用户返回响应。简单来说,就是当用户访问指定地址时,可以调用函数来处理用户的请求
- 路由是Express的根本,通过路由才可以在用户和服务器之间建立联系。
-
express中请求由谁处理,由路由决定
五、实现路由
可以将路由定义为两个部分:
第一部分:HTTP请求的方法(get或post)
第二部分:是URL中指定的路径
Express中提供了一些列函数,可以让我们很方便的实现路由:
app.<method>(path,callback) ;
语法method指的是HTTP请求方法,比如:
app.get() ;
- 配置get路由,仅能处理get请求
app.post()
- 配置post路由,仅能处理post请求
app.all()
- 配置all路由,可以处理所有的请求
path:指要通过回调函数来处理的URL地址 (url客户端请求的地址/要映射的请求地址)
callback:是应该处理该请求并把响应发回客户端的请求处理程序
配置好路由以后,当浏览器访问指定的地址时,将会自动调用回调函数,
并且在调用回调函数时,每次都会传递进两个对象作为实参
request
- 请求,代表浏览器发送给服务器的请求报文
response
- 响应,代表的是服务器发送给浏览器的响应报文
六、路由的实例
app.get("/testReq", function (req , res) {
/*
req
- 是用户发送给服务器的请求报文
- 所有用户发送的信息,都可以通过req来获取
- req.get(header)
- 获取用户发送的请求头信息
- req.headers
- 获取用户所有的请求头
- req.query
- 获取get请求的请求参数(查询字符串)
- query是一个对象,对象的属性名就是用户发送的参数的名字
属性值就是参数的值(当一个参数有多个值时,会返回数组)
- 通过query可以获取用户发送的请求参数
req.query.参数名
*/
//console.log(req.method);
//console.log(req.get("User-Agent"));
//console.log(req.headers);
console.log(req.query.username);
//通过response来向浏览器发送一个响应
//res.send()用来设置响应体,并发送响应报文
res.send("我是testReq发送的响应~~~");
});
七、路由的运行流程
当Express服务器接收到一个HTTP请求时,它会查找已经为适当的HTTP方法和路径定义的路由 ,如果找到一个,Request和Response对象会被创建,并被传递给路由的回调函数。
我们便可以通过Request对象读取请求,通过Response对象返回响应
八、request对象
Request对象是路由回调函数中的第一个参数,代表了用户发送给服务器的请求信息 ,
通过Request对象可以读取用户发送的请求包括URL地址中的查询字符串中的参数,和post请求的请求体中的参数。
Request的属性和方法:
属性/方法 | 描述 |
originalUrl | 请求的原始地址 |
protocol | 协议字符串 |
ip | 请求的ip地址 |
path | 请求的URL的路径部分 |
host | 请求的主机名 |
method | 请求的方法 |
query | 请求的查询字符串 |
get(header) | 返回header的值的方法 |
headers | 请求头的对象形式 |
九、Response
Response对象是路由回调函数中的第二个参数,代表了服务器发送给用户的响应信息
通过Response对象可以设置响应报文中的各个内容,包括响应头和响应体。
response对象的属性方法:
属性/方法 | 描述 |
getHeader(header) | 获取响应头 |
set(header,value) | 设置响应头 |
set(headerObj) | 设置响应头 |
res.send([body]) | 设置响应体 |
res.status(code) | 设置响应状态码 |
res.redirect([status,] path) | 重定向 |
res.sendFile(path [, options] [, fn]) | 发送文件 |
res.download(path [, filename] [, fn]) | 提供文件下载 |
send()
- 设置响应体并发送响应报文
res.sendFile(path [, options] [, fn])
- 向客户端发送一个文件(路径必须是绝对路径)
这个文件如果浏览器可以打开则打开,否则下载
res.download(path [, filename] [, fn])
- 向客户端端发送一个文件用于下载
无论浏览器是否能打开文件,都下载
res.redirect([status,] path)
- 请求的重定向
- 重定向,现象上看,在浏览器输入的是一个地址,但是显示的确实另一个
- 原理:
- 重定向就是服务器收到客户端的请求后,向客户端发送一个特殊的响应,
这个响应告诉浏览器再去向另一个地址发送请求
HTTP/1.1 302 Found
Location: /form.html
- 这个特殊的响应的响应状态码是302,当浏览器看到302这个状态码,
就会自动向响应头Location指向的地址发送请求
设置响应体并发送响应报文 在一次请求中send()只能调用一次