原文 https://blog.csdn.net/u013263917/article/details/78682270#1.2

nodejs接收post请求参数
1.1-浏览器发送post请求参数的方式
1.2-服务端接收post请求参数的方式

post请求参数不直接在url路径中拼接,而是放在请求体中发送给服务器

请求三要素:请求行、请求头、请求体
1.1-浏览器发送post请求参数的方式
post请求参数不能直接在url路径中拼接,所以一般使用ajax请求来发送post请求参数
通常都是提交form表单数据使用post请求

<script>

//浏览器中一般使用ajax来发送post请求
$('#form').on('sunmit', function (e) {
//禁用表单默认提交事件
e.preventDefault();
$.ajax({
url: 'heroAdd',
type: 'post',
dataType: 'json',
data: $(this).serialize(),
success: function (data) {
}
});
});
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
完整代码

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>Hero - Admin</title>
<!-- 导入jquery -->
<script src="/node_modules/jquery/dist/jquery.js"></script>
<!-- bootstrap布局 -->
<link rel="stylesheet" href="/node_modules/bootstrap/dist/css/bootstrap.css">
<script src="/node_modules/bootstrap/dist/js/bootstrap.js"></script>
<style>
.hero-list img {
width: 50px;
}
</style>
</head>

<body>
<header>
<div class="page-header container">
<h1>
<a href="/">王者荣耀</a>
<small>英雄管理器</small>
</h1>
</div>
</header>
<div class="container hero-list">
<form id="form">
<div class="form-group">
<label for="exampleInputEmail1">英雄名称</label>
<input type="text" name="name" class="form-control" id="exampleInputEmail1" placeholder="请输入英雄名称">
</div>
<div class="form-group">
<label for="exampleInputPassword1">英雄性别</label>
<div class="radio">
<label>
<input type="radio" name="gender" id="optionsRadios1" value="男" checked>男
</label>
<label>
<input type="radio" name="gender" id="optionsRadios1" value="女" checked>女
</label>
</div>
</div>
<div class="form-group">
<label for="exampleInputFile">英雄图片</label>
<!-- <input type="file" id="exampleInputFile"> -->
<p class="help-block">请上传英雄图片.</p>
</div>
<button type="submit" class="btn btn-success">点击保存</button>
</form>
</div>
</body>

<script>
//浏览器中一般使用ajax来发送post请求
$('#form').on('sunmit', function (e) {
//禁用表单默认提交事件
e.preventDefault();
$.ajax({
url: 'heroAdd',
type: 'post',
dataType: 'json',
data: $(this).serialize(),
success: function (data) {
}
});
});
</script>

</html>
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
1.2-服务端接收post请求参数的方式
与get请求不同的是,服务端接收post请求参数不是一次就可以获取的,通常需要多次

一般post请求发送的参数数据要比get请求大得多
1.服务端接收表单数据流程

(1)如果表单数据量越多,则发送的次数越多,如果比较少,可能一次就发过来了
(2)接收表单数据的时候,需要通过监听 req 对象的 data 事件来取数据
(3)每当收到一段表单提交过来的数据,req 的 data 事件就会被触发一次,同时通过回调函数可以拿到该 段 的数据
服务端需要自己添加数据流
(4)当接收表单提交的数据完毕之后,会执行req的 on 事件
2.服务端处理表单数据的逻辑流程

(1)对数据进行解码(中文数据提交时会进行url编码)
decodeURI(data)
(2)使用querystring对url进行反序列化(解析url将&和=拆分成键值对),得到一个对象
querystring是nodejs内置的一个专用于处理url的模块,API只有四个,详情见nodejs官方文档
post请求参数不能使用url模块解析,因为他不是一个url,而是一个请求体对象
(3)将数据插入到数据库

//导入querystring模块(解析post请求数据)
var querystring = require('querystring');

console.log(req.method);

//1.通过判断url路径和请求方式来判断是否是表单提交
if (req.url === '/heroAdd' && req.method === 'POST') {
/**服务端接收post请求参数的流程
* (1)给req请求注册接收数据data事件(该方法会执行多次,需要我们手动累加二进制数据)
* * 如果表单数据量越多,则发送的次数越多,如果比较少,可能一次就发过来了
* * 所以接收表单数据的时候,需要通过监听 req 对象的 data 事件来取数据
* * 也就是说,每当收到一段表单提交过来的数据,req 的 data 事件就会被触发一次,同时通过回调函数可以拿到该 段 的数据
* (2)给req请求注册完成接收数据end事件(所有数据接收完成会执行一次该方法)
*/
//创建空字符叠加数据片段
var data = '';

//2.注册data事件接收数据(每当收到一段表单提交的数据,该方法会执行一次)
req.on('data', function (chunk) {
// chunk 默认是一个二进制数据,和 data 拼接会自动 toString
data += chunk;
});

// 3.当接收表单提交的数据完毕之后,就可以进一步处理了
//注册end事件,所有数据接收完成会执行一次该方法
req.on('end', function () {

//(1).对url进行解码(url会对中文进行编码)
data = decodeURI(data);
console.log(data);

/**post请求参数不能使用url模块解析,因为他不是一个url,而是一个请求体对象 */

//(2).使用querystring对url进行反序列化(解析url将&和=拆分成键值对),得到一个对象
//querystring是nodejs内置的一个专用于处理url的模块,API只有四个,详情见nodejs官方文档
var dataObject = querystring.parse(data);
console.log(dataObject);
});
}
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
39
40
41
完整代码

//1.导入http模块
var http = require('http');
//导入文件模块
var fs = require('fs');
//导入路径模块
var path = require('path');
//导入querystring模块(解析post请求数据)
var querystring = require('querystring');

//2.创建服务器
var app = http.createServer();

//3.添加响应事件
app.on('request', function (req, res) {

console.log(req.method);

//1.通过判断url路径和请求方式来判断是否是表单提交
if (req.url === '/heroAdd' && req.method === 'POST') {
/**服务端接收post请求参数的流程
* (1)给req请求注册接收数据data事件(该方法会执行多次,需要我们手动累加二进制数据)
* * 如果表单数据量越多,则发送的次数越多,如果比较少,可能一次就发过来了
* * 所以接收表单数据的时候,需要通过监听 req 对象的 data 事件来取数据
* * 也就是说,每当收到一段表单提交过来的数据,req 的 data 事件就会被触发一次,同时通过回调函数可以拿到该 段 的数据
* (2)给req请求注册完成接收数据end事件(所有数据接收完成会执行一次该方法)
*/
//创建空字符叠加数据片段
var data = '';

//2.注册data事件接收数据(每当收到一段表单提交的数据,该方法会执行一次)
req.on('data', function (chunk) {
// chunk 默认是一个二进制数据,和 data 拼接会自动 toString
data += chunk;
});

// 3.当接收表单提交的数据完毕之后,就可以进一步处理了
//注册end事件,所有数据接收完成会执行一次该方法
req.on('end', function () {

//(1).对url进行解码(url会对中文进行编码)
data = decodeURI(data);
console.log(data);

/**post请求参数不能使用url模块解析,因为他不是一个url,而是一个请求体对象 */

//(2).使用querystring对url进行反序列化(解析url将&和=拆分成键值对),得到一个对象
//querystring是nodejs内置的一个专用于处理url的模块,API只有四个,详情见nodejs官方文档
var dataObject = querystring.parse(data);
console.log(dataObject);
});
}

if (req.url === '/heroAdd' && req.method === 'POST') {
fs.readFile('./heroAdd.html', function (err, data) {
if (err) {
throw err;
}
res.end(data);
});
} else if (req.url.indexOf('/node_modules') === 0) {
fs.readFile(__dirname + req.url, function (err, data) {
if (err) {
throw err;
} else {
res.end(data);
}
});
} else {
res.end('请求路径: ' + req.url);
}
});

//4.监听端口号
app.listen(3000, function () {
console.log('欢迎来到王者荣耀英雄管理器');
});
---------------------
作者:坤小
来源:CSDN
原文:https://blog.csdn.net/u013263917/article/details/78682270
版权声明:本文为博主原创文章,转载请附上博文链接!

nodejs接收post请求参数的更多相关文章

  1. 提高生产力:SpringMVC中,使用扩展数据类型TypedMap接收Web请求参数

    在Web项目中,如果前端MVC框架使用的是SpringMVC,可以使用Map接收前端请求参数,比bean要方便很多. 尤其是SpringMVC和Mybatis一起用的时候,用Map大大减少了需要的be ...

  2. Spring接收web请求参数的几种方式

    1 查询参数 请求格式:url?参数1=值1&参数2=值2...同时适用于GET和POST方式spring处理查询参数的方法又有几种写法: 方法一:方法参数名即为请求参数名 // 查询参数1 ...

  3. js笔试-接收get请求参数

    请编写一个JavaScript函数,它的用途是接收url中get请求的参数,并返回为对象, 如: var url = “https://i.cnblogs.com/EditPosts.aspx?opt ...

  4. asp.net接收ajax请求参数时为空的现象

    如题,如果使用ajax请求asp.net后台时,如果使用jquery时,默认是添加了请求头,使后台能识别,并能通过Request对象进行获取. 但是如果你使用的是window.XMLHttpReque ...

  5. html 接收GET请求参数

       function GetQueryString(name)   {        var reg = new RegExp("(^|&)"+ name +" ...

  6. 学习SpringMVC——如何获取请求参数

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他(@CookieValue)!她(@ModelAndView) ...

  7. springMvc源码学习之:spirngMVC获取请求参数的方法2

    @RequestParam,你一定见过:@PathVariable,你肯定也知道:@QueryParam,你怎么会不晓得?!还有你熟悉的他 (@CookieValue)!她(@ModelAndView ...

  8. Spring MVC在接收复杂集合参数

    Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...

  9. SpringMVC接收复杂集合参数

    Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...

随机推荐

  1. Fink| API| Time与Window

    1. Flink 批处理Api 1.1 Source Flink+kafka是如何实现exactly-once语义的 Flink通过checkpoint来保存数据是否处理完成的状态: 有JobMana ...

  2. 【CodeForces】CodeForcesRound576 Div1 解题报告

    点此进入比赛 \(A\):MP3(点此看题面) 大致题意: 让你选择一个值域区间\([L,R]\),使得序列中满足\(L\le a_i\le R\)的数的种类数不超过\(2^{\lfloor\frac ...

  3. MySQL实战45讲学习笔记:第三十五讲

    一.本节概述 在上一篇文章中,我和你介绍了 join 语句的两种算法,分别是 Index Nested-LoopJoin(NLJ) 和 Block Nested-Loop Join(BNL). 我们发 ...

  4. P2按要求补全表达式

    ---恢复内容开始--- #include<stdio.h> int main () {   int x; printf("输入一个整数"); scanf(" ...

  5. Linux shell自动读mongo数据、远程获取文件大小示例脚本

    1.示例1 功能:对mongoDB导出数据,根据sid的不同状态进行统计 技术点:shell bash  读写文件.字符串截取.函数.用多个文件提到的map.grep查找并赋值给变量 #!/bin/b ...

  6. python-9-列表的增删改查

    前言 本节是:列表(list)的增删改查.什么是列表? 列表(list)是最常用的Python数据类型,它可以作为一个方括号[]内的逗号分割值出现.如:[1,5,"b"] 一.增 ...

  7. Flink是如何实现exactly-once语义的

    转自:https://blog.csdn.net/xianpanjia4616/article/details/86375224 最少一次:断了之后 重新执行 再去重 严格一次:根据检查点,再执行一次 ...

  8. background属性怎么添加2个或多个背景图

    最近遇到一个需求,下面充值金额按钮是一个背景图,点击之后显示的状态也是一个背景图,如下图      按照惯用的套路,新增一个class,点击后的状态直接写在里面即可 然而点击后,虽然状态背景成功显示出 ...

  9. Serverless 的喧哗与骚动(一)附Serverless行业发展回顾

    作者 | 阿里中间件高级技术专家 许晓斌 <Maven实战>作者,曾负责 AliExpress 微服务架构演进,现在负责阿里集团 Serverless 技术研发落地. 导读:从 2016 ...

  10. 禁用software reporter tool.exe 解决CPU高占用率的问题

    或者 或者 C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\SwReporter\36.184.200 下编辑 manifes ...