请求数据
前台:form、ajax、jsonp
后台:接受请求并返回响应数据
 
 
前台《= http协议 =》后台
 
常用的请求的方式:
1、GET           数据在url中
2、POST         数据不再url中
 
get方式:通过地址栏来传输     name=value&name1=value1&               作用:分享
 
post方式:通过head头传输      数据相对安全
 
form
 
     action="http://www.vaidu.com"          地址
     method:"post/get"                              传输方式
 
 
window.location.pathname         路径  也可以做跳转               www.baidu.com
window.location.port                  端口号                                   8080
window.location.hash                  锚点                                   #后面的
window.location.protocol           协议                                     http/https
window.location.search               数据                                   ?号后面的   name=value&name1=value1
 
浏览器 《=   通信数据   =》 服务器
 
通信数据:
1、头(header)
2、请求主体(content)
 
 
【GET方式】
<form action="http://localhost:8080/" method="get">
用户:<input type="text" name="user" value="" /><br>
密码:<imput type="password" name="pass" value="" /><br>
<input type="submit" value="提交">
</form>
const http = require('http');

http.createServer( (req,res) => {
console.log(req.url); // /aaa?user=jason&pass=123456
let GET = {};
let url = req.url;
// 判断请求的url中是否含有查询参数
if(url.indexOf('?') != -) {
let arr = url.split('?');
// arr[0] = 地址 '/aaa' arr[1] = 数据 'user=jason&pass=123456'
let arr2 = arr[].split('&');
for(let i = ; i < arr2.length; i++) {
let arr3 = arr2[i].split('=');
// arr3[0] ==>姓名 arr3[1] ==> 密码
GET[arr3[]] = arr3[];
}
}
res.write('有请求了');
res.end();
}).listen();
const http = require('http');

http.createServer( (req, res) => {
console.log(req.url);
let GET = {};
let url = req.url;
if(url.indexOf('?') != -) {
let arr = url.split('?');
url = arr[];
let arr2 = arr[].split('&');
for(let i = ; i < arr2.length; i++) {
let arr3 = arr2[i].split('=');
GET[arr3[]] = arr3[];
}
}
console.log(GET, url)
res.write('');
res.end();
}).listen();
 
提供querystring(查询字符) 模块
const querystring = require('querystring');
let GET = querystring.parse('name=jason&age=18');
console.log(GET); // { name: 'jason', password: '123456' } '/'
// {} '/favicon.ico'

url模块:

const urlLib = require('url');

let urlObj = urlLib.parse('http://www.baidu.com:8901/index/static?name=jason&age=18', true);

console.log(urlObj);

当第二个参数为true时:

Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com:8901',
port: '',
hostname: 'www.baidu.com',
hash: null,
search: '?name=jason&age=18',
query: { name: 'jason', age: '' },
pathname: '/index/static',
path: '/index/static?name=jason&age=18',
href: 'http://www.baidu.com:8901/index/static?name=jason&age=18'
}

为false时:

Url {
protocol: 'http:',
slashes: true,
auth: null,
host: 'www.baidu.com:8901',
port: '',
hostname: 'www.baidu.com',
hash: null,
search: '?name=jason&age=18',
query: 'name=jason&age=18',
pathname: '/index/static',
path: '/index/static?name=jason&age=18',
href: 'http://www.baidu.com:8901/index/static?
name=jason&age='
}
区别为query是否被querystring
 
于是上面的例子可以被简写为
const http = require('http');
const urlLib = require('url'); http.createServer( (req, res) => {
let urlObj = urlLib.parse(req.url, true);
let GET = urlObj.query;
let urlName = urlObj.pathname;
console.log(GET, urlName);
res.write('完成');
res.end();
}).listen();
总结:
1.querystring模块只能解析     query
2.url可以解析整个url
 
【post请求】
请求头最大      32k
请求主体最大   1G
 
数据量的大小产生了数据处理方式的区别
 
处理很大的数据---分段处理  (防止堵塞和出错)
 
1.data事件   有一段数据到达的时候,可以发送很多次
req.on('data',  回调函数 function(data) {
     
});
2.end事件     数据全部到达的时候,只执行一次
     req.on('end', () => {
 
     });
<form action="http://localhost:8999/aaa" method="post">
账号:<input type="text" name="name" value=""><br>
密码:<input type="password" name="password" value=""><br>
<input type="submit" value="提交">
</form>
const http = require('http');
const querystring = require('querystring'); http.createServer( (req, res) => {
// post -- req
let str = '';
let i = ;
req.on('data', (data) => {
console.log(`第${i++}次接收到数据`);
str += data;
});
req.on('end', () => {
let POST = querystring.parse(str);
console.log(str);
});
}).listen();
得到的结果是:
 
第0次接收到数据
{
  name: 'jason',
  password: '123456',
}
const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url'); let server = http.createServer( (req, res) => {
// GET
let url = urlLib.parse(req.url).pathname;
const GET = urlLib.parse(req.url, true).query;
// POST
let str = '';
let POST;
req.on('data', (data) => {
str += data;
});
req.on('end', () => {
POST = querystring.parse(str);
console.log(url, GET, POST);
});
console.log(url, GET, POST);
// 文件读取
let file_name = './www' + url;
fs.readFile(file_name, (err, data) => {
if(err) {
res.write('');
}else{
res.write('读取成功');
}
res.end();
})
}); server.listen();
【get请求】
/aaa { name: 'jason ', password: '123456', text: 'abcd' } undefined
【post请求】
/aaa {} { name: 'jason ', password: '654321', text: 'zzzz' }
【文件读取】
/1.html {} {}
/favicon.ico {} undefined

nodejs学习笔记二(get请求、post请求、 querystring模块,url模块)的更多相关文章

  1. nodejs学习笔记二——链接mongodb

    a.安装mongoose库用来链接mongodb数据库 安装mongodb数据库参考mongodb安装 前言(怨言) 本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录: ...

  2. nodejs学习笔记二:解析express框架项目文件

    上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添 ...

  3. nodejs学习笔记<二>简单的node服务器

    在环境搭建好后,就可以开始动手架设(node驱动)一个简单的web服务器. 首先,nodejs还是用js编写.先来看一段node官网上的实例代码. var http = require('http') ...

  4. nodejs学习笔记<二> 使用node创建基础服务器

    创建服务器的 server.js 内容. var http = require("http"); // 引用http模块 http.createServer(function(re ...

  5. NodeJS学习笔记二

    类声明和类表达式 ES6 中的类实际上就是个函数,而且正如函数的定义方式有函数声明和函数表达式两种一样,类的定义方式也有两种,分别是:类声明.类表达式. 类声明 类声明是定义类的一种方式,就像下面这样 ...

  6. openresty 学习笔记二:获取请求数据

    openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...

  7. Nodejs学习笔记(二)——Eclipse中运行调试Nodejs

    前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...

  8. Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识

    目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...

  9. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

随机推荐

  1. js判断是移动端还是PC端访问网站

    window.location.href = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? "htt ...

  2. c#进阶之lambda表达式

    阅读之前,先确保对委托有基本的了解,传送门 c#进阶之浅析委托和事件. lambda表达式雏形第一步 在委托那篇文章,绑定的的方法都是具名函数,为了简化书写,可以换成匿名函数 public deleg ...

  3. ASP.NET MVC学习(一)

    这几天在学习asp.net mvc 一上来就被书中的什么依赖注入,什么单元测试搞的晕晕呼呼,根本就不理解,前天开始做书中的运动商店项目,一上来就遇到个大难题,书中的连接字符串的写法,跟以往在winfo ...

  4. artemplate模板

    artTemplate 介绍 最近使用了一款模板,学习成本比较低,性能也不错.觉得很好用,所以推荐给大家. artTemplate 是新一代 javascript 模板引擎,它采用预编译方式让性能有了 ...

  5. [UWP]xaml中自定义附加属性使用方法的注意项

    ---恢复内容开始--- 随笔小记,欢迎指正 在UWP平台上做WVVM的时候,想针对ListBox的SelectionChanged事件定义一个自定义的命令,于是使用自定义附加属性的方式.可是最后自定 ...

  6. Dapper.Contrib.Extensions问题

    Dapper.Contrib.Extensions问题 Dapper.Extension.1.0.0.1\lib\net45\Dapper.Extension.dll Dapper.Contrib.1 ...

  7. 当Shell遇上了NodeJS

    此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 摘要 在企业级系统维护和互联网运维中,Shell脚本的编写与维护常必不可少, 但是Shell脚本的编写与调试 ...

  8. iOS 的各种识别码

    在iOS系统中,获取设备唯一标识的方法有很多: 1. x UDID (Unique Device Identifier,已过期) 2. x OPEN UDID (已过期) 3. 广告标示符(IDFA- ...

  9. java学习笔记—web计算器(36)

    MVC模式 模式主要的任务是帮助开发者解决一类问题. MVC模式主要是用于规划你的网站的开发的一个基本的结构. Servlet记住充当的是控制器层.cn.itcast.controller Java类 ...

  10. 【扫盲】HTML5、Web APP、3G网站、Wap网站傻傻分不清楚

           移动互联网指手机网站和app,其中app分为native app(原生app),web app(html5开发),Hybrid app(前两种app结合):手机网站分为wap网站和3g网 ...