版权声明:忠于祖国,忠于人民 https://blog.csdn.net/boss2967/article/details/86538570
1. node的http模块的案例
- 为了简单起见,我直接将hard-coding的数据进行转发
/**
* nodejs向apache发送请求,接收响应后返回到浏览器端
*/
app.get('/nodeReq', function(req,res,next){
var data = {
age: 20,
name: "cici",
like: "shopping"
};
data = require('querystring').stringify(data); //数据以url param格式发送
data = JSON.stringify(data); //数据以json格式发送
console.log(data);
var opt = {
method: "POST",
host: "localhost",
port: 8012,
path: "/php/get_data.php",
headers:{
//"Content-Type": "application/x-www-form-urlencoded", //for url parameter
"Content-Type": "application/json", // for json data
"Content-Length": data.length
}
};
var req = http.request(opt, function(apacheRes){//建立连接 和 响应回调
if(apacheRes.statusCode == 200){
apacheRes.setEncoding('utf8');
var body = "";
apacheRes.on('data', function(recData){ body += recData;});
apacheRes.on('end', function(){ res.send(body); /*发送收到的响应*/ });
}else{
res.send(500, "error");
}
});
req.write(data + "\n"); //发送请求
req.end(); //请求发送完毕
});
2. 用http.request发送文件给服务端, 或带参post数据到服务端
var http = require('http');
var fs = require('fs');
var queryString = require('querystring');
var boundaryKey = 'A' + new Date().getTime(); //随便加个前缀A 避免全数字作为分界符
/**
* 带参数发post请求
*/
function doPost(){
var opt = {
host:'localhost', //注意:不用协议部分(http://)
port:'80',
path: '/testonly/doupload.php', //斜杠开头
method:'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} //设置content-type 头部
};
var body = '';
var req = http.request(opt, function(res){
res.statusCode == 200 && console.log('REQUEST OK..' );
res.setEncoding('utf8');//res为ClientResponse的实例,是readableStream, 设置字符编码
res.on('data', function(chunk){
body += chunk;
}).on('end', function(){
console.log('Got data: ', body);//end事件中 打印全部响应数据
});
}).on('error', function(err){
console.log('error: ', err.message);
});
var data = {name:'sindy', age:22};
var data1 = JSON.stringify(data);
var data2 = queryString.stringify(data); //注意 querystring.stringify 和 JSON.stringify的区别
console.log(data1);
console.log(data2);
req.write(data2); //req为ClientRequest的实例,是writableStream,写数据到流中
req.end();//结束请求
}
/**
* 发送文件给服务器并带上其他表单字段数据
*/
function doUpload(){
var opt = {
host:'localhost',
port:'80',
path: '/testonly/doupload.php',
method:'POST',
headers: {'Content-Type':'multipart/form-data; boundary='+boundaryKey, 'Connection':'keep-alive'} //注意:上传文件时的 content-type 设置
};
var body = '';
var req = http.request(opt, function(res){
res.statusCode == 200 && console.log('REQUEST OK..' );
res.setEncoding('utf8');
res.on('data', function(chunk){
body += chunk;
}).on('end', function(){
console.log('Got data: ', body);//php 返回 $_FILES 和 $_POST的内容给客户端
});
}).on('error', function(err){
console.log('error: ', err.message);
});
//ClientRequest writableStream 注意:文件字段的分界符
req.write('--'+boundaryKey+'\r\nContent-Disposition:form-data; name="upfile"; filename="test.zip"\r\nContent-Type:application/x-zip-compressed');
// 1M缓冲
var fileStream = fs.createReadStream('test.zip', {bufferSize: 1024 * 1024});
fileStream.pipe(req, {end: false});
fileStream.on('end', function(){
// ::注意::文件字段内容和其他字段之间空2行,字段名和字段值之间空2行
req.write('\r\n\r\n--'+boundaryKey+'\r\n'+'Content-Disposition: form-data; name="submit"\r\n\r\n'+'sendfile');
req.end('\r\n--'+ boundaryKey + '--'); //注意:结束时的分界符 末尾'--'
});
}
// doPost();
doUpload();
3.闪电空投
const fs = require("fs");
const xlsx = require('node-xlsx');
const Web3 = require("web3");
const log4js = require('log4js')
const ajax = require('ajax');
const http = require('http');
const queryString = require('querystring');
const logger = log4js.getLogger();
var web3 = new Web3();
//
// <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
// ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < MARK < OFF
logger.level = 'info';
logger.info("Some debug messages");
console.log("---",ajax.post);
//
let a = {ab:"ss"}
let url = 'http://127.0.0.1:3003/Bolt/flyDrop';
let data1 = {de:"zhangsan"};
//
/**
* 带参数发post请求
*/
function doPost(){
var opt = {
host:'127.0.0.1', //注意:不用协议部分(http://)
port:'3003',
path: '/Bolt/flyDrop', //斜杠开头
method:'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} //设置content-type 头部
};
var body = '';
var req = http.request(opt, function(res){
res.statusCode == 200 && console.log('REQUEST OK..' );
res.setEncoding('utf8');//res为ClientResponse的实例,是readableStream, 设置字符编码
res.on('data', function(chunk){
body += chunk;
}).on('end', function(){
console.log('Got data: ', body);//end事件中 打印全部响应数据
});
}).on('error', function(err){
console.log('error: ', err.message);
});
var data = {name:'sindy', age:22};
var data1 = JSON.stringify(data);
var data2 = queryString.stringify(data); //注意 querystring.stringify 和 JSON.stringify的区别
console.log(data1);
console.log(data2);
req.write(data2); //req为ClientRequest的实例,是writableStream,写数据到流中
req.end();//结束请求
}
doPost();
// ajax.postJSON(url,data1,function(err,data){
// if (!err){
// console.log("----------",data);
// }else{
// console.log("------err",err);
// }
//
// });
// ajax.post('http://127.0.0.1:3003/Bolt/flyDrop',"abc",(err,data)=>{
// if(!err){
// console.log("发送交易成功");
// }else{
// console.log("发送错误",err);
// }
// });
//
//01. 读取xlsx文件
let Filesdata = fs.readFileSync('testdemo1.xlsx');
logger.info("读取文件成功");
//02. 序列化数据
let Workdata = xlsx.parse(Filesdata);
logger.info("序列化数据成功");
//03. 校验数据
logger.info("数据校验中......................");
console.log("------------------",Workdata[0]);
let data = Workdata[0].data;
let lengths =data.length;
// console.log("数据对象是:",data);
//结果集
let result = {
State: 0, //0 1 3
Tote: lengths,
Valid: 0,
UnValid: 0,
ValidData: [],
UnValidData: [],
Bz: [],
sData:{
address:[],
value:[],
state:[]
}
}
// 01. 首先判断数据长度
if (data.length <= 0) {
//对象长度小于0
logger.error("数据长度小于0");
result.State = 3; //
return result;
}
//02. 判断地址和内容是否为空
for (let i = 0; i < lengths; i++) {
//01.首先判断2个参数都为空
if ((data[i][0] == null ||data[i][0] == undefined ||data[i][0] == '') && (data[i][1] == null || data[i][1] == undefined || data[i][1] == '')) {
//01.如果两位数据都是空
result.UnValid += 1;
//对象保存 序号:数据
let rows = {
no: i,
address:data[i][0],
value: data[i][1],
state: 0
}
// let cData = {i:param[i].no,data[i][0],data[i][1],Json_list.STATES_PAR.CheckPass}};
result.UnValidData.push(rows);
//
continue;
} else {
console.log("411");
//02. 判断地址为空的情况
if (data[i][0] == null ||data[i][0] == undefined ||data[i][0] == '') {
//
console.log("6");
result.UnValid += 1;
//对象保存 序号:数据
let rows = {
no: i,
address:data[i][0],
value: data[i][1],
state: 0
}
result.UnValidData.push(rows);
continue;
} else if (data[i][1] == null || data[i][1] == undefined || data[i][1] == '') {
//值
console.log("5");
result.UnValidData += 1;
//对象保存 序号:数据
let rows = {
no: i,
address:data[i][0],
value: data[i][1],
state: 4
}
result.UnValidData.push(rows);
continue;
}
}
//02. 判断地址是否合法
if (!web3.isAddress(data[i][0])) {
console.log("423");
//如果不是有效地址
result.UnValid += 1;
//对象保存 序号:数据
let rows = {
no: i,
address:data[i][0],
value: data[i][1],
state: 4
}
result.UnValidData.push(rows);
continue;
} else {
console.log("地址校验通过");
//如果是有效地址
result.Valid += 1;
//对象保存 序号:数据
let rows = {
no: i,
address:data[i][0],
value: data[i][1],
state: 5
}
result.ValidData.push(rows);
//分开追加数据
result.sData.address.push(data[i][0]);
result.sData.value.push( parseInt(data[i][1]+'00000000'));
}
//数据处理完成后,返回参数
//处理完标志
result.State = 3;
}
console.log("--------数据处理完成",result.sData);
//发送交易
// ajax.post(url,"afaafaaaaaaaaaaaaaaaaaaaaaaaaaaaa",(err,data)=>{
// if(!err){
// console.log("发送交易成功");
// }else{
// console.log("发送错误",err);
//
// }
// });