美文网首页Node.js
Node.js进阶之【9】 : express模块获取post数

Node.js进阶之【9】 : express模块获取post数

作者: 岚平果 | 来源:发表于2020-03-26 15:02 被阅读0次

一、express模块获取post数据

1) express模块获取客户端通过 【post】发过来的数据,需要中间介 【body-parser】,首页我们下载这个中间介

cnpm i body-parser
  1. 新建一个客户端文件 【index.html】
<!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>
    <form action="http://localhost:8080" method="post">
        用户名:<input name="name" type="text" /> </br>
        密码:<input name="pass" type="password" /> </br>
        <input value="提交" type="submit"/> </br>
    </form>
</body>
</html>
  1. 新建立一个本地服务器 【server.js】
const express = require('express');
// 中间介body-parser可以获取客户端通过post发过来的数据,转化成 【Object】 数据类型
const bodyParser = require('body-parser');

let server = express();
// 这 一步不能缺少,全局解析body-parser,接收两个参数,一个是 【extended: true/false】(是否拓展模式), 另一个是 【limit: 2*1024*1024】(服务器限制接收数据大小2M)))
server.use(bodyParser.urlencoded({
    extended: false,                // 是否拓展模式
    limit: 2 * 1024 * 1024          // 服务器限制接收数据大小2M
}))
server.use(express.static('./www'))
server.use('/', (req, res) => {
    console.log(req.body)
    res.end()
})
server.listen(8080)
  1. 用命令打开服务器 【node server.js】


    image.png
二、手动写一个【body-parser】中间介

1)原理:server.use((req,res,next) => {}) 表示全部接口经过,我们可以通过把这个 body 赋值给req, 当服务端通过 post 方式发送数据,通过 req.body 来获取,如下举例,把 【a=2】 赋值到全局里的接口,其他接口也能获取到这个a的值

    1. 建立一个本地服务器 【server3.js】
const express = require('express');

var server = express();
server.use((req, res, next) => {
    req.a = 2
    // next( ) 不能缺少,以便其他接口也能获取到
    next()
})
server.use(express.static('./www'))
server.use('/', (req, res) => {
    console.log(req.a)
    res.end()
})
server.listen(8087)
    1. 启动服务器【node server3.js】


      image.png
  1. 通过上面测试,我们发现是成立的,现在我们自己写一个 body-parser
const express = require('express');
const queryString = require('querystring');

var server = express();
server.use((req, res, next) => {
    var str = '';
    req.on('data', (data) => {
        str += data;
    })
    req.on('end', () => {
        req.body = queryString.parse(str);
        next();
    })
})
server.use('/', (req, res) => {
    console.log(req.body, 'req.body')
    res.end()
})
server.listen(8099);
image.png

总结:
1)获取get数据:

server.use('/',(req,res) => {
  var get = req.query
})
  1. 获取post数据
server.use(bodyparser.urlencoded({}))
server.use('/',(req,res) => {
  var post = req.body
})
  1. 链式操作,接口相同,同时执行了 【next()】,链式操作第一个路径参数如果没有,表示全局的。
server.get('/', (req,res,next) => {
  next()
})
// 全局的next
server.post((req,res,next) => {
  next()
})
server.use('/', (req,res,next) => {
  next()
})

相关文章

网友评论

    本文标题:Node.js进阶之【9】 : express模块获取post数

    本文链接:https://www.haomeiwen.com/subject/snlcuhtx.html