Node.js系列之发起get/post请求(2)


Posted in Javascript onAugust 30, 2019

服务器与浏览器的交互主要方式有get/post请求。

下面,我们来看一下node.js发起get/post请求。

1、get

由于get请求的参数在url后面,所以相对比较简单。node.js中的url模块提供了parse函数来处理。具体代码如下:

//引入模块
var http=require('http');
var url=require('url');
var util=require('util');

//创建http Server 处理请求
http.createServer(function(req,res){
 res.writeHead(200,{'Content-Type': 'text/plain'});

 //解析url参数
 var params=url.parse(req.url,true).query;
 res.write('用户名:'+params.name);
 res.write('\n');
 res.write('密码'+params.password);
 res.end();
}).listen(8888);

测试:

注意:上面代码中监听的是8888端口。

Node.js系列之发起get/post请求(2)

2、post

post请求的内容都包含在请求体中,因此处理起来没有get请求那么简单。所有node.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>' +
 '密码: <input name="password"><br>' +
 '<input type="submit">' +
 '</form>' +
 '</body></html>'
console.log('准备html');
//创建http Server 处理请求
http.createServer(function(req,res){
 console.log('进入http Server');
 //定义post变量,暂存请求体信息
 var body='';

 //通过req的data事件监听函数,当接收到请求体的数据,累加到post变量
 req.on('data',function(chunk){
  body+=chunk;
 });
 console.log('进入req end 1');
 //在end事件触发后,将post解析为真正的post请求格式
 req.on('end',function(){
  body=querystring.parse(body);
  res.writeHead(200,{'Content-Type': 'text/html; charset=utf8'});
  console.log('进入req end 2');
  if(body.name && body.password){
   res.write(body.name);
   res.write('<br>');
   res.write(body.password);
  }else{
   res.write(postHTML);
  }
  res.end();
 });
}).listen(8888);

测试:

在node终端启动成功后,浏览器输入地址http://localhost:8888,看到如下页面:

Node.js系列之发起get/post请求(2)

输入用户名和密码,完成回写到浏览器。

Node.js系列之发起get/post请求(2)

3、扩展

到此,node.js处理get和post请求的小例子就做完了。现在,应该和过去的语言对比找关系,编织知识网了。

3.1模块

每种语言都提供了一定的“基础设施”或者叫“基础工具”,比如java/c++的类库。node也提供了很多模块、函数、常用工具等,引入的位置在Demo的最上方,看到模块的名字基本上就能猜到它的功能。
比如:

var http=require('http');
var url=require('url');
var util=require('util');

3.2Web服务器

Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。

大致的架构逻辑是:Browser——>Web Server——>Application Server——>DB。

web服务器、客户端实例:

需要引入http模块,使用createServer方法创建。
注意:这里就不详细介绍了,只说明主要流程。

1)Server

//创建http服务器
http.createServer( function (request, response) { 
 // 解析请求,包括文件名
 var pathname = url.parse(request.url).pathname;

 // 从文件系统中读取请求的文件内容,
 fs.readFile(pathname.substr(1), function (err, data) {

   // 响应文件内容
   response.write(data.toString());  
  }
  // 发送响应数据
  response.end();
 }); 
}).listen(8081);

// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8081/');

2)Client

var http = require('http');

// 封装请求的对象
var options = {
 host: 'localhost',
 port: '8081',
 path: '/index.htm' 
};

// 处理响应的回调函数
var callback = function(response){
 // 不断更新数据
 var body = '';
 response.on('data', function(data) {
  body += data;
 });

 response.on('end', function() {
  // 数据接收完成
  console.log(body);
 });
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();

执行server.js,

Node.js系列之发起get/post请求(2)

然后执行client.js,然后就可以获得index.html的内容了。

Node.js系列之发起get/post请求(2)

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

Javascript 相关文章推荐
给moz-firefox下添加IE方法和属性
Apr 10 Javascript
json 定义
Jun 10 Javascript
xheditor与validate插件冲突的解决方案
Apr 15 Javascript
浅析javascript 定时器
Dec 23 Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 Javascript
JavaScript让Textarea支持tab按键的方法
Jun 26 Javascript
javascript生成大小写字母
Jul 03 Javascript
jQuery插件jquery-barcode实现条码打印的方法
Nov 25 Javascript
React 组件转 Vue 组件的命令写法
Feb 28 Javascript
Vue.js 踩坑记之双向绑定
May 03 Javascript
js 实现watch监听数据变化的代码
Oct 13 Javascript
动态实现element ui的el-table某列数据不同样式的示例
Jan 22 Javascript
Node.js系列之安装配置与基本使用(1)
Aug 30 #Javascript
微信小程序实现写入读取缓存详解
Aug 30 #Javascript
VUE 自定义组件模板的方法详解
Aug 30 #Javascript
Jquery动态列功能完整实例
Aug 30 #jQuery
vue 兄弟组件的信息传递的方法实例详解
Aug 30 #Javascript
微信小程序sessionid不一致问题解决
Aug 30 #Javascript
解析JS在获取当前月的最后一天遇到的坑
Aug 30 #Javascript
You might like
用libTemplate实现静态网页的生成
2006/10/09 PHP
php数字游戏 计算24算法
2012/06/10 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
PHP反射机制用法实例
2014/08/28 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
jQuery.fn和jQuery.prototype区别介绍
2013/10/05 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
详解小程序原生使用ES7 async/await语法
2018/08/06 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
简单实现python画圆功能
2018/01/25 Python
python爬虫爬取淘宝商品信息
2018/02/23 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
用Python做一个久坐提醒小助手的示例代码
2020/02/10 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
少儿节目主持串词
2014/04/02 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
岗位聘任协议书
2015/09/21 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis