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 相关文章推荐
通过修改referer下载文件的方法
May 11 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
jquery iframe操作详细解析
Nov 20 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
Apr 12 Javascript
构造函数+原型模式构造js自定义对象(最通用)
May 12 Javascript
Angular表单验证实例详解
Oct 20 Javascript
Vue.js第四天学习笔记(组件)
Dec 02 Javascript
ajax与json 获取数据并在前台使用简单实例
Jan 19 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
vue实现百度下拉列表交互操作示例
Mar 12 Javascript
微信小程序实现图片选择并预览功能
Jul 25 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
PHP获取url的函数代码
2011/08/02 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
PHP5.3新特性小结
2016/02/14 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
javascript event 事件解析
2011/01/31 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
jQuery滑动到底部加载下一页数据的实例代码
2017/05/22 jQuery
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
基于 vue-skeleton-webpack-plugin 的骨架屏实战
2019/08/05 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
浅谈Python中数据解析
2015/05/05 Python
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
opencv python 图像去噪的实现方法
2018/08/31 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
给校长的建议书400字
2014/05/15 职场文书
岳庙导游词
2015/02/04 职场文书
协议书格式模板
2016/03/24 职场文书
Python中Permission denied的解决方案
2021/04/02 Python