nodejs学习笔记二(get请求、post请求、 querystring模块,url模块)

请求数据

前台: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(‘?‘) != -1) {
     let arr = url.split(‘?‘);
     // arr[0] = 地址 ‘/aaa‘     arr[1] = 数据 ‘user=jason&pass=123456‘
     let arr2 = arr[1].split(‘&‘);
     for(let i = 0; i < arr2.length; i++) {
          let arr3 = arr2[i].split(‘=‘);
          // arr3[0] ==>姓名    arr3[1] ==> 密码
          GET[arr3[0]] = arr3[1];
     }
}
     res.write(‘有请求了‘);
     res.end();
}).listen(8080);
const http = require(‘http‘);

http.createServer( (req, res) => {
    console.log(req.url);
    let GET = {};
    let url = req.url;
    if(url.indexOf(‘?‘) != -1) {
        let arr = url.split(‘?‘);
        url = arr[0];
        let arr2 = arr[1].split(‘&‘);
        for(let i = 0; i < arr2.length; i++) {
            let arr3 = arr2[i].split(‘=‘);
            GET[arr3[0]] = arr3[1];
        }
    }
    console.log(GET, url)
    res.write(‘1111111‘);
    res.end();
}).listen(8799);

node 官网  http://nodejs.cn/api/querystring.html

提供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: ‘8901‘,
  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=18‘
}

为false时:

Url {
  protocol: ‘http:‘,
  slashes: true,
  auth: null,
  host: ‘www.baidu.com:8901‘,
  port: ‘8901‘,
  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=18‘
}

区别为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(8998);

总结:

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 = 0;
     req.on(‘data‘, (data) => {
          console.log(`第${i++}次接收到数据`);
         str += data;
     });
     req.on(‘end‘, () => {
          let POST = querystring.parse(str);
          console.log(str);
     });
}).listen(8999);

得到的结果是:

第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(‘404‘);
        }else{
            res.write(‘读取成功‘);
        }
        res.end();
    })
});

server.listen(8999);

【get请求】

/aaa { name: ‘jason ‘, password: ‘123456‘, text: ‘abcd‘ } undefined

【post请求】

/aaa {} { name: ‘jason ‘, password: ‘654321‘, text: ‘zzzz‘ }

【文件读取】

/1.html {} {}

/favicon.ico {} undefined

时间: 2024-12-20 02:07:53

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

nodejs学习笔记&lt;二&gt;简单的node服务器

在环境搭建好后,就可以开始动手架设(node驱动)一个简单的web服务器. 首先,nodejs还是用js编写.先来看一段node官网上的实例代码. var http = require('http'); http.createServer(function(req,res){ res.writeHead(200,{'Content-Type':'text/plain'}); res.end('Holle,nodejs'); }).listen(8080,'127.0.0.1'); console

nodejs学习笔记二链接mongodb

a.安装mongoose库用来链接mongodb数据库 安装mongodb数据库参考mongodb安装 前言(怨言) 本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录:npm install mongodb --save 但是发现报gyp ERR! stack Error:Can't find python executable "python"错误,缺少python运行环境. 我晕死,我链接mongodb还需要Python,这不是存心让用户找虐.查到有

Nodejs学习笔记(二)

Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻塞或等待文件 I/O 操作.这就大大提高了 Node.js 的性能,可以处理大量的并发请求. 阻塞代码实例 创建一个文件 input

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

上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添加的,而node_modules这个文件夹内存放着项目需要的中间件,public是存放静态文件的文件夹,routes顾名思义就是路由解析文件的所在,views就是ejs模板引擎的视图文件,app.js是项目运行的入口存放着全局大量的配置,package.json是加载第三方包的配置文件.下面来一一解

NodeJS 学习笔记(二)

url模块 ,包含分析和解析 URL 的工具. var url = require('url'); url.parse(urlStr[, parseQueryString][, slashesDenoteHost])  第一个参数,输入 URL 字符串,返回一个对象. var url = require('url'); url.parse('http://www.tianh.top'); { protocol: 'http:', slashes: true, auth: null, host:

angular学习笔记(二十六)-$http(4)-设置请求超时

本篇主要讲解$http(config)的config中的timeout项: $http({ timeout: number }) 数值,从发出请求开始计算,等待的毫秒数,超过这个数还没有响应,则返回错误 demo: html: <!DOCTYPE html> <html ng-app = 'HttpGet'> <head> <title>18.4 $http(2)</title> <meta charset="utf-8"

angular学习笔记(二十四)-$http(2)-设置http请求头

1. angular默认的请求头: 其中,Accept 和 X-Requested-With是$http自带的默认配置 2. 修改默认请求头: (1) 全局修改(整个模块) 使用$httpProvider依赖 var myApp = angular.module('MyApp',[]); myApp.config(function($httpProvider){ console.log($httpProvider.defaults.headers.common) //修改/操作$httpProv

angular学习笔记(二十五)-$http(3)-转换请求和响应格式

本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transformRequest: function(data){ //对前台发送的data进行处理 return data } }) 这个在测试的时候遇到了很大的问题.只要经过transformRequest函数处理,哪怕是不做任何处理,node后台都会报错,需要尝试使用php 2. transformResp

angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入angular-resource.min.js文件 2.在模块中依赖ngResourece,在服务中注入$resource var HttpREST = angular.module('HttpREST',['ngResource']); HttpREST.factory('cardResource