文章目录
一、Express介绍
1、Express是什么
Express是基于Node.js平台,快速、开放、极简的Web开发框架。
ExpressExpress的作用和Node.js内置的http模块类似,它可以帮助开发人员快速创建Web服务器。
ExpressExpress是目前流行的基于Node.js运行环境的Web应用程序开发框架,它简洁且灵活,为Web应用程序提供了强大的功能。Express提供了一个轻量级模块,类似于jQuery(封装的工具库),它把Node.js的HTTP模块的功能封装在一个简单易用的接口中,用于扩展HTTP模块的功能,能够轻松地处理服务器的路由、响应、Cookie和HTTP请求的状态。
优势:
(1)简洁的路由定义方式。
(2)简化HTTP请求参数的处理。
(3)提供中间件机制控制HTTP请求。
(4)拥有大量第三方中间件。
(5)支持多种模版引擎。
本质:是npm上的第三方包,提供了快速创建Web服务器的便捷方法。
https://www.expressjs.com.cn/
这是express中文官网,可以在上面学习关于express的知识。
2、为什么要使用Express
当我们想创建服务器时,由于Node.js提供的http内置模块使用起来很复杂,开发效率低,所以基于http模块,封装出了Express,极大的提高了开发效率。
3、express的作用
使用Express,可以方便、快速的创建Web网站的服务器或API接口的服务器。
Web网站服务器
:专门对外提供Web网页资源的服务器。
API接口服务器
:专门对外提供API接口的服务器。
二、Express的基本使用
1、安装
创建目录,并在该目录下新建目录,如server作为项目的根目录。
server目录下执行如下命令。
npm init(项目初始化,生成package.json文件)
npm install express(安装express)
安装完成后,在当前目录下打开命令行工具执行“npm list express”命令,可以查看Express版本。
2、创建基本的Web服务器
//1、导入express模块
const express = require('express');
//2、创建web服务器
const app = express();
//3、监听端口80,启动web服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1');
});
3、监听GET请求
通过app.get()方法,可以监听客户端的GET请求,具体的语法格式如下:
//监听GET请求
//参数1:客户端请求的URL地址、
//参数2:请求对应的处理函数
// req:请求对象(包含了与请求相关的属性和方法)
// res:响应对象(包含了与响应相关的属性和方法)
app.get('请求URL',function(req,res){
//处理函数
})
4、监听POST请求
通过app.post()方法,可以监听客户端的POST请求,具体语法格式如下:
//参数1:客户端请求的URL地址
//参数2:请求对应的处理函数
// req:请求对象(包含了与请求相关的属性和方法)
// res:响应对象(包含了与响应相关的属性和方法)
app.post('请求URL',function(req,res){
//处理函数
})
5、把内容响应给客户端
下表中响应对象(res)上的方法可以向客户端发送响应,并终止
请求-响应循环。如果没有从路由处理程序调用这些方法,客户端请求将保持挂起
状态。
方法 | 说明 |
---|---|
res.download() | 提示要下载的文件。 |
res.end() | 结束响应过程。 |
res.json() | 发送一个JSON响应。 |
res.jsonp() | 发送JSON响应与JSONP支持。 |
res.redirect() | 重定向请求。 |
res.render() | 渲染视图模板。 |
res.send() | 发送各种类型的响应。 |
res.sendFile() | 以八位元流的形式发送文件。 |
res.sendStatus() | 设置响应状态码,并将其字符串表示作为响应体发送。 |
如通过res.send()方法,可以把处理好的内容,发送给客户端:
app.get('/user',(req,res)=>{
//向客户端发送JSON对象
res.send({
name:'haha',
age:90,
gender:'男'
})
})
app.post('/user',(req,res)=>{
//向客户端发送文本内容
res.send('请求成功')
})
6、举例
//1、导入express
const express = require('express');
//2、创建web服务器
const app = express();
//3、监听GET和POST请求,并向客户端响应具体的内容
app.get('/user',(req,res)=>{
//向客户端发送JSON对象
res.send({
name:'haha',
age:90,
gender:'男'
})
})
app.post('/user',(req,res)=>{
//向客户端发送文本内容
res.send('请求成功')
})
//4、启动web服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1');
});
首先我们启动服务器
然后我们可以打开postman测试一下,我们的请求是否生效,首先测试GET请求,输入网址后点击send,就会出现以下结果,则响应成功。
然后测试POST请求,同样输入网址,选择POST,再点击send,出现以下结果,响应成功。
7、获取URL中携带的查询参数
通过req.query
对象,用于获取GET请求参数,即可以访问到客户端通过查询字符串的形式,发送到服务器的参数,会将GET参数转换为对象并返回。
app.get('/',(req,res)=>{
//req.query默认是一个空对象
//客户端使用 ?name=ahah&age=20 这种查询字符串形式,发送到服务器的参数,
//可以通过 req.query 对象访问到,例如:
//req.query.name req.query.age
console.log(req.query);
})
举例如下:
//1、导入express
const express = require('express');
//2、创建web服务器
const app = express();
//3、监听GET和POST请求,并向客户端响应具体的内容
app.get('/user',(req,res)=>{
//向客户端发送JSON对象
res.send({
name:'haha',
age:90,
gender:'男'
})
})
app.post('/user',(req,res)=>{
//向客户端发送文本内容
res.send('请求成功')
})
app.get('/',(req,res)=>{
//通过req.query可以获取到客户端发送过来的查询参数
//req.query默认是一个空对象
console.log(req.query);
res.send(req.query);
})
//4、启动web服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1');
});
启动服务器后我们可以发现,终端里打印的为空对象,用postman测试时响应的也是空对象,这是因为req.query默认情况下为空对象。
接下来,我们重新测试,在postman输入的网址里输入查询字符串 ?name=haha&age=90,结果如下:
查询字符串成功显示。
8、获取URL中的动态参数
通过req.params
对象,可以访问到URL中,通过:
匹配到的动态参数,即获取路由传递的数据:
URL地址中,可以通过 :参数名
的形式,匹配动态参数值,此时传递的各种数据,id都会接受。
app.get('/user/:id',(req,res)=>{
//req.params默认是一个空对象
//里面存放着通过 : 动态匹配到的参数值
console.log(req.params)
})
举例如下:
//1、导入express
const express = require('express');
//2、创建web服务器
const app = express();
//注意:这里的 :id 是一个动态的参数
app.get('/user/:id/:age',(req,res)=>{
//req.params默认是一个空对象
//里面存放着通过 : 动态匹配到的URL参数值
console.log(req.params)
res.send(req.params)
})
//3、启动web服务器
app.listen(80,()=>{
console.log('express server running at http://127.0.0.1');
});
我们可以通过postman测试一下:
9、获取post请求数据
(1)通过事件获取数据
req.on('data',function(mydata){
})
首先我们先写一个post.html文件,里面使用form表单,使它可以传递数据给服务器端。
method:
设置请求方法,如post;
action:
设置请求url
name:
用于接收表单输入的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>post</title>
</head>
<body>
<form action="/mylogin" method="post">
<label>
用户:
<input type="text" name="uname">
</label>
<br/>
<label>
密码:
<input type="password" name="upwd">
</label>
<br/>
<input type="submit">
</form>
</body>
</html>
其次创建一个服务器,根据提交按钮的请求,创建相应的路由。
const express = require('express');
const querystring = require('querystring')
const app = express();
app.get('/login',(req,res)=>{
//响应文件
res.sendFile(__dirname+'/post.html'