关于 POST 请求

post 方法作为 http 请求很重要的一部分,几乎所有的网站都有用到它,与 get 不同,post 请求更像是在服务器上做修改操作,它一般用于数据资源的更新。
相比于 get 请求,post 所请求的数据会更加安全。上一章中我们发现 get 请求会在地址栏显示输入的用户名和密码(有中文时会转化为 BASE64 加密),而 post 请求则会将数据放入 http 包的包体中,这使得别人无法直接看到用户名和密码!

Express 如何设置 POST 请求

1.我们的知道,首先我们得知道在 form 表单进行 post 请求,enctype 属性一般设置为“application/x-www-form-urlencoded”,如果设置成 multipart/form-data,则多用于文件上传,如下:

1
2
3
4
5
<form
action="#"
method="post"
enctype="application/x-www-form-urlencoded"
></form>

2 设置解析 body 中间件

1
app.use(express.urlencoded())

3 获取 body 数据

1
req.body.username

登陆案例:

HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<h1>登陆</h1>
<form action="/login" method="POST">
<div>
用户名:<input type="text" name="username">
</div>
<div>
密码:<input type="password" name="password">
</div>
<button>登陆</button>
</form>

</body>
</html>

APP.JS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var express = require('express');
var path = require('path')
var app = express();
var sqlQuery = require('./lcMysql')

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
//解析post提交的数据
app.use(express.urlencoded())

//搜索首页
app.get('/',(req,res)=>{
res.render('index.ejs')
})

//登陆页
app.get('/login',(req,res)=>{
res.render('login')
})
//处理登陆请求
app.post('/login',async (req,res)=>{
//获取用户名和密码
let username = req.body.username
let password = req.body.password
//查询数据库是否由此用户名和密码
let sqlStr = 'select * from user where username = ? and password = ?';
let arr = [username,password];
let result = await sqlQuery(sqlStr,arr)
if(result.length == 0 ){
res.send("登陆失败")
}else{
res.send("登陆成功")
}
})
module.exports = app;