一、关于POST请求

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

二、Express如何设置POST请求

2.1 前端使用POST方式请求

设置form表单请求为post方法,enctype属性一般设置为“application/x-www-form-urlencoded”,如果设置成multipart/form-data,则多用于文件上传

  1. <form action="/login" method="post" enctype="application/x-www-form-urlencoded">
  2. </form>

2.2 设置解析body中间件

express 无法直接获取Post请求的参数,需要设置body解析中间件

  1. app.use(express.urlencoded())

2.3 获取POST请求body数据

  1. app.post('/login',function(req,res,next){
  2. let username = req.body.username;
  3. let password = req.body.password;
  4. res.send(req.body)
  5. })

三、案例

需求:使用Post请求表单提交“用户名”和“密码”参数,服务器解析Post请求Body中的数据,并将参数返回

登录页面login.ejs

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>登录</title>
  5. <link rel='stylesheet' href='/stylesheets/style.css' />
  6. </head>
  7. <body>
  8. <div style="width:300px;text-align: center;">
  9. <h1>登录</h1>
  10. <form action="/login" method="POST" enctype="application/x-www-form-urlencoded">
  11. 用户名:<input type="text" name="username"></br>
  12. 密码:<input type="password" name="password"></br>
  13. <input type="submit" value="登录">
  14. </form>
  15. </div>
  16. </body>
  17. </html>

创建接收请求的路由

  1. var express = require('express');
  2. var path = require('path');
  3. var app = express();
  4. // 设置模板引擎
  5. app.set('views', path.join(__dirname, 'views'));
  6. app.set('view engine', 'ejs');
  7. //设置body解析中间件
  8. app.use(express.urlencoded())
  9. //接收/login GET请求,返回登录页面login.ejs
  10. app.get('/login',function(req,res,next){
  11. res.render('login')
  12. })
  13. //接收/login POST请求
  14. app.post('/login',function(req,res,next){
  15. let username = req.body.username;
  16. let password = req.body.password;
  17. res.send(req.body)
  18. })
  19. module.exports = app;

body.gif