NodeJS收发GET和POST请求的示例代码


Posted in NodeJs onAugust 25, 2017

本文介绍了NodeJS收发GET和POST请求的示例代码,分享给大家,也给自己留个笔记

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

三 发送Get

index.js:

var http = require('http'); 

  

var qs = require('querystring'); 

  

var data = { 

  a: 123, 

  time: new Date().getTime()};//这是需要提交的数据 

  

  

var content = qs.stringify(data); 

  

var options = { 

  hostname: '127.0.0.1', 

  port: 10086, 

  path: '/pay/pay_callback?' + content, 

  method: 'GET' 

}; 

  

var req = http.request(options, function (res) { 

  console.log('STATUS: ' + res.statusCode); 

  console.log('HEADERS: ' + JSON.stringify(res.headers)); 

  res.setEncoding('utf8'); 

  res.on('data', function (chunk) { 

    console.log('BODY: ' + chunk); 

  }); 

}); 

  

req.on('error', function (e) { 

  console.log('problem with request: ' + e.message); 

}); 

  

req.end();

四 接收Post

 当请求这个页面时,如果post数据中没有name和url,则返回一个提交页面;如果有name和url,则打印。

1. post请求会触发"data"事件。

2. chuck使用+=保存,因为会额外请求favicon.ico,导致body={}。

3. 请求结束,会触发"end"事件。将chuck反序列化querystring.parse(body)为对象数组, 使用body.name访问post变量。

index.js:

var http = require('http');

var querystring = require('querystring');

 

var postHTML =

  '<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +

  '<body>' +

  '<form method="post">' +

  '网站名: <input name="name"><br>' +

  '网站 URL: <input name="url"><br>' +

  '<input type="submit">' +

  '</form>' +

  '</body></html>';

 

http.createServer(function (req, res) {

  //暂存请求体信息

  var body = "";

 

  //请求链接

  console.log(req.url);

 

  //每当接收到请求体数据,累加到post中

  req.on('data', function (chunk) {

    body += chunk; //一定要使用+=,如果body=chunk,因为请求favicon.ico,body会等于{}

    console.log("chunk:",chunk);

  });

 

  //在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。

  req.on('end', function () {

    // 解析参数

    body = querystring.parse(body); //将一个字符串反序列化为一个对象

    console.log("body:",body);

    // 设置响应头部信息及编码\<br><br>   res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'}); 



 

    if(body.name && body.url) { // 输出提交的数据

      res.write("网站名:" + body.name);

      res.write("<br>");

      res.write("网站 URL:" + body.url);

    } else { // 输出表单

      res.write(postHTML);

    }

    res.end();

  });

}).listen(3000);

浏览器中打开:http://127.0.0.1:3000/

第一次访问127.0.0.1,post中没有name和url,显示提交页面。

NodeJS收发GET和POST请求的示例代码

点击提交后,网页会打印出如下结果。

NodeJS收发GET和POST请求的示例代码

问题:

1. req.on("end"事件会多次触发。因为会请求favicon.ico。

NodeJS收发GET和POST请求的示例代码

2.  res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});

text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。

text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理。

五 发送Post

index.js:

var http = require('http');

var querystring = require('querystring');

 

var contents = querystring.stringify({

  name:'byvoid',

  email:'byvoid@byvoid.com',

  address:'Zijing'

});

 

var options = {

  host:'www.byvoid.com',

  path:'/application/node/post.php',

  method:'POST',

  headers:{

    'Content-Type':'application/x-www-form-urlendcoded',

    'Content-Length':contents.length

  }

}

 

var req = http.request(options, function(res){

  res.setEncoding('utf8');

  res.on('data',function(data){

    console.log("data:",data);  //一段html代码

  });

});

 

req.write(contents);

req.end;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
利用NodeJS的子进程(child_process)调用系统命令的方法分享
Jun 05 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
基于NodeJS的前后端分离的思考与实践(二)模版探索
Sep 26 NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 NodeJs
Nodejs学习笔记之Stream模块
Jan 13 NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
Nodejs Express 通过log4js写日志到Logstash(ELK)
Aug 30 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 #NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 #NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 #NodeJs
nodejs动态创建二维码的方法
Aug 12 #NodeJs
理解nodejs的stream和pipe机制的原理和实现
Aug 12 #NodeJs
Windows下快速搭建NodeJS本地服务器的步骤
Aug 09 #NodeJs
让nodeJS支持ES6的词法----babel的安装和使用方法
Jul 31 #NodeJs
You might like
玛琪朵 Macchiato
2021/03/03 咖啡文化
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
解决nuxt 自定义全局方法,全局属性,全局变量的问题
2020/11/05 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
详解Python中的文本处理
2015/04/11 Python
Python查询IP地址归属完整代码
2017/06/21 Python
python 动态加载的实现方法
2017/12/22 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
Django的性能优化实现解析
2019/07/30 Python
创业计划书如何吸引他人眼球
2014/01/10 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
实习计划书范文
2015/01/16 职场文书
检讨书范文
2015/01/27 职场文书
张思德观后感
2015/06/09 职场文书
欠条范文
2015/07/03 职场文书
大学运动会通讯稿
2015/07/18 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
Python异常类型以及处理方法汇总
2021/06/05 Python