获取http请求报文头部信息
利用nodejs中的 http.ServerRequest中获取1):
request.method
用来标识请求类型
request.headers
其中我们关心两个字段:
content-type
包含了表单类型和边界字符串(下面会介绍)信息。
content-length
post数据的长度
关于content-type
get请求的headers中没有content-type这个字段
post 的 content-type 有两种
application/x-www-form-urlencoded
这种就是一般的文本表单用post传地数据,只要将得到的data用querystring解析下就可以了
multipart/form-data
文件表单的传输,也是本文介绍的重点
获取POST数据
前面已经说过,post数据的传输是可能分包的,因此必然是异步的。post数据的接受过程如下:
注意,对于非文件post数据,上面以字符串接收是没问题的,但其实 postDataChunk 是一个 buffer 类型数据,在遇到二进制时,这样的接受方式存在问题。
B. nodejs 怎样知道请求是get或post
一 express框架接收
app.get('/',function(req,res) { var url = req.query.url; var name = req.query.name; console.log(url, name);});
二 接收Get
1. get参数在req.url上
2. 使用url.parse将数据由字符串转变为obj
index.js:
var http = require('http');var url = require('url');var util = require('util'); //req 请求信息 res返回信息http.createServer(function(req, res){ res.writeHeader(200, {'Content-Type':'text/javascript;charset=UTF-8'}); //状态码+响应头属性 // 解析 url 参数 var params = url.parse(req.url, true).query; //parse将字符串转成对象,req.url="/?url=123&name=321",true表示params是{url:"123",name:"321"},false表示params是url=123&name=321 res.write("网站名:" + params.name); res.write("\n"); res.write("网站 URL:" + params.url); res.end(); }).listen(3000);
浏览器打开:
http://127.0.0.1:3000/?url=123&name=321
网页显示:
网站名:321网站 URL:123
C. nodejs 做http服务器的时候如何获取post过来的参数
尽管可以,但是一般不直接用nodejs直接做web server,在node js中常用的web server是express。
在express中,可内以通过req.param('key')来获取容post回来的参数。
D. 谁帮我写下nodejs POST收发模块
0、你的需求不是很明确,你的数据库是什么,收到数据后做什么,发送的又是什么数据,什么时候取数据库数据,什么时候存数据库数据,这些你自己理清楚,下面的代码变化下位置,应该是可以满足你的需求的。
1、npminstallmysql //nodejs操作mysql数据库的包网页链接
npminstallasync //nodejs控制同步异步的包网页链接
npminstall request //nodejs对http进行封装后的包,比http更好用网页链接
2、下面的思路是:从mysql数据库取出数据 --> 将数据库数据和你的某个数据进行对比 --> 将对比结果发送到指定地址
varmysql=require('mysql');
varasync =require('async');
varrequest =require('request ');
varconnection=mysql.createConnection({
host:'localhost',
user:'root',
password:'123456',
database:'aaa'
});
connection.connect();
connection.query('SELECT data FROM tableA',function(error,results,fields){
if(error)throwerror;
var data =results[0];//自己可以打印result看看是什么,有助于你使用。
console.log('Thedata is:',data);
async.auto({//
checkDifferent: function (cb) {
//checkDifferent函数进行数据对比,具体怎么对比看你的需求了,再将对比后的数据往下一个函数传递,具体内容参考async库的作用。
cb(null, differentData);
},
postData: function (result, cb) {//发送数据
var differentData = result.checkDifferent//即上个函数得到对比数据
request.post('你的数据即将的URL', {
formData: {
"data": differentData //这里是简单的例子,具体是否需要headers或者Auth验证看你自己需求,使用方式,例子,上面都给了网址。
},
json: true,
}, function (err, res, body) {
console.log(body);
return;
});
}
})
});
connection.end();
3、接收数据需要建立服务器,不清楚你现在是用什么框架,这里用express做例子。
(1)express的安装、使用方式自行网络
(2)
app.use('/', routes);//即接收到上面2中的post数据后,在routes中进行数据处理(保存)
(3)保存数据到数据库
此时我们已经利用express,建立了服务器,并接收到了数据,数据库保存跟上面2中的查询数据是一样的,只是数据库语句变成INSERT INTO tableA SET XXX,
varmysql=require('mysql');
varpool=mysql.createPool({
connectionLimit:10,
host:'localhost',
user:'root',
password:'123456',
database:'aaa'
});
pool.query('INSERT INTO tableA SET XXX',function(error,results,fields){
if(error)throwerror;
console.log(results[0]);
});
4、希望对题主有启发
E. 如何用nodejs搭建web服务器
创建一个记事本将下面的代码复制进去 保存为app.js
var http = require('http');//引入响应头
http.createServer(function (request, response) {
//参数一是与请求相关的对象
//参数二是与响应有关的对象
// 发送 HTTP 头部
// HTTP 状态值: 200 : OK
// 内容类型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 发送响应数据 "Hello World"
response.end('Hello World\n');
}).listen(8888);//监听端口
// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');
以下以我的电脑上的路径为准 我是将app.js 保存在E:\NODE这个文件夹下面
接下来就是运行了打开cmd
第一步:E:
第二步:cd NODE //CD是 命令行改变目录的命令
第三步:node app.js
这个是运行效果接下来访问localhost:8888就可以看到hollo word
建议多看一些node的模块 比如 express和session mysql之类的模块
F. nodejs post请求和gat请求之间的区别
get是从服务器上获取数据,post是向服务器传送数据。
2 get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4 get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5 get安全性非常低,post安全性较高。
6 HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了
7 在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原 样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有1024字节,而POST则没有此限制
G. nodejs 怎么获取post请求的json数据
前端传给服务器的只是json 格式的字符串,使用json_decode,
mixed json_decode ( string $json [, bool $assoc ] )
var_mp(json_decode($json));
var_mp(json_decode($json, true));
如果不带参数,则返回版为对象
带上true时,返回数组
foreach($ARR as $k=>$v){
echo 'key='.$k.';value='.$v;
}
单独处理每个key 和对权应的value就好
H. Nodejs中怎么获取HTML中一个form下的所有POST数据
首先获取http,并创建一个web服务,监听本地端口1337,这个可以修改,任何未被占用的端口都可以用,并坚挺data事件和end事件,整个文件保存为app.js
下面这里贴上测试代码
////////////////app.js///////
var http = require('http');
var server = http.createServer(function(req,res){
if(req.url!=="/favicon.ico"){
req.on('data',function(data){
console.log("服务器接收到的数据:"+decodeURIComponent(data));
});
req.on("end",function(){
console.log('客户端请求数据全部接收完毕');
});
}
res.end();
}).listen(1337,"localhost",function(){
console.log("listened");
});
////////////////index.html///////
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nodejs的data事件与end事件的回调函数测试用页面</title>
</head>
<body>
<form id= "form1" action = "http://localhost:1337/" method = "post">
姓名:<input type = 'text' name = "name" value ="dragon"><br/>
年龄:<input type = "number" name = "age" value ="25">
<input type = "submit" value =" 提交"/>
</form>
</body>
</html>