node.js-- post json格式数据到服务器的几种方法
(一) node.js 原生自带http模块,可以解决基于http协议下的请求及回发,执行效率高,但是好多东西需要开发人员自己动手来实现,看下面代码
var http=require('http');
var body = {
"data":{
"channel" : "aaa",
"appkey" : "bbb"
},
"sign" : "22334455",
"token" : "bb667788"
};
var bodyString = JSON.stringify(body);
var headers = {
'Content-Type': 'application/json',
'Content-Length': bodyString.length
};
var options = {
host: '127.0.0.1',
port: 3005,
path: '/Config',
method: 'POST',
headers: headers
};
var req=http.request(options,function(res){
res.setEncoding('utf-8');
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
//这里接收的参数是字符串形式,需要格式化成json格式使用
var resultObject = JSON.parse(responseString);
console.log('-----resBody-----',resultObject);
});
req.on('error', function(e) {
// TODO: handle error.
console.log('-----error-------',e);
});
});
req.write(bodyString);
req.end();
http模块比较原始,请求参数里我们要手动指定请求头类型,头长度,请求方式,主机头和端口等.
当我们将json格式参数post上去以后,得到的response 对象需要我们在 data 事件上手动处理获取到的数据, end 事件表示接收数据流已结束, error 事件是当回发数据发生错误时将自动触发此事件响应函数
请求结果:
下面我们介绍第二种相对简单的方式来post json格式参数.
(二)
大名鼎鼎的 request 模块上场了,这个模块帮我们做了很多我们不关心的东西,比如请求后得到的 response 对象,我们将不会非常繁琐的去手动捕获 data ,end ,error 事件. 取而代之的是回调函数里直接将我们关心的回发数据放到了一个变量里,看下面的代码:
此模块并发node.js 原生自带模块,首先需要 npm install request ,下面代码的参数同样做了处理
var request=require('request');
var options = {
headers: {"Connection": "close"},
url: 'http://127.0.0.1:3005/Config',
method: 'POST',
json:true,
body: {data:{channel : "aaa",appkey : "bbb"},sign : "ccc",token : "ddd"}
};
function callback(error, response, data) {
if (!error && response.statusCode == 200) {
console.log('----info------',data);
}
}
request(options, callback);
代码明显比第一种方式少了很多,callback 里面的 data 参数就是我们请求路径后得到的内容,而且我们在 options 中指定了 json:true ,所以请求和回发的数据自动转变成了 json 对象.我们看下这次的运行结果:
下面还有一种更简单的方法和大家分享
(三)
也是一个第三方模块,叫做 request-json
看名字就非常容易理解,有关json 格式参数的请求模块,使用也非常方便.
首先 npm install request-json 安装此模块,定义好 json请求参数对象,见下面代码:
request = require('request-json');
var client = request.newClient('http://127.0.0.1:3005/');
var data = {data:{channel : "aaa",appkey : "bbb"},sign : "4444",token : "555"};
client.post('Config', data, function(err, res, body) {
console.log(res.statusCode,body);
});
返回的body 也是自动序列化成json对象,见运行结果
前面的 200 是 res.statusCode 回发状态值,接着输出的是我们得到的json对象,无论从使用还是理解上,都是最简单的一种方法.