隔壁孩子10篇博客node入门而且写了一个前后端分离项目,你怎么还在睡觉!!!(三)

————————————————————————————————————————————————————————————
----------------- 今日份nodeJS复习 -------------------
----- 1.path路径
----- 2.url网址
----- 3.http协议
----- 4.http模块
----- 5.网络服务器
————————————————————————————————————————————————————————————
————————————————

1.path路径

1.什么是path模块?

path是我们nodeJS提供的一个系统模块,主要用于格式化或者是拼接一个完整的路径。

2.path模块的方法

2.1 path.normalize()
  • path.normalize() 规范化地址
  • 代码演示
//引入path模块
const path  = require('path');

//先定义一个地址  
const p1 = "../../../path../a/./b/../c/1.html";

//p1是一个格式复杂,..和.没有必要的地址
//使用path.normalize()规范化地址
var p2 = path.normalize(p1);
console.log(p2);


结果:(规范后的路径)
..\..\..\path..\a\c\1.html
2.2 path.jion()
  • path.jion() 拼接路径
  • 代码演示
//引入path模块
const path  = require('path');

//先定义一个地址  
const p1 = "./test/1.html";

//凭借路径
const p2 = path.join('code',p1);

console.log(p2);

结果:(拼接后的地址)
code\test\1.html

2.2 path中关于文件名的一些方法
  • path.dirname()返回路径中的目录名
  • path.basename()返回路径中的文件名和扩展名
  • path.extname() 返回路径中的扩展名
  • path.parse() 返回路径中的每一个部分
  • 代码演示
//引入path模块
const path  = require('path');

//先定义一个地址  
const p1 = "../day03/test/1.html";

const dirname = path.dirname(p1);
const basename = path.basename(p1);
const extname = path.extname(p1);
const obj = path.parse(p1);

console.log("目录名:" + dirname);
console.log("文件名 + 拓展名:" + basename);
console.log("拓展名:" + extname);
console.log(obj)
结果:
目录名:../day03/test
文件名 + 拓展名:1.html
拓展名:.html
一次性拿到所有的名字
{
  root: '',
  dir: '../day03/test',
  base: '1.html',
  ext: '.html',
  name: '1'
}

2.url模块(*)

2.1 什么是URL?

url是全球统一资源定位符,对网站资源的一种简介表达形式,也称为网址。

2.2 URL的组成?

  • 完整结构

      协议 : //  用户名 :密码 @ 主机名.名.域:端口号/目录名/文件名.扩展名?参数名=参数值&参数名2=参数值2 # hash地址
    
  • 举个例子

      https://music.163.com/#/search/m/?friend=&s=123&type=1
    

3.http协议(*)

3.1 什么是网络?

  • 网络是一个共享,传播信息的虚拟平台。

3.2 什么是网络协议?

  • 每天有大量的数据在网络上传输,都需要遵守相应的协议,规则就是网络协议。

3.3 什么是http协议?

  • http(hypertext transfer protocol)文本传输协议,传输超文本内容,图片,音频,视频等。
  • http 规定了数据在服务器与浏览器之间传输的格式和方式。

3.4 http协议细节?

  • 依次请求对应依次应答(响应)。
  • 定义了浏览器以什么格式向服务器发送请求。
  • 定有了服务器以什么格式解析浏览器发送过来的数据。
  • 定义了服务器以什么格式响应数据给浏览器。
  • 定义了浏览器以什么格式解析服务器响应的数据。

3.5 软件开发模式?

  • 单机模式:
    打开电脑就可以使用,Hbuilder, Wps, Office,画图等
  • C/S模式(Client/Server)客户端和服务端
    需要下载安装以后才能连接网络使用,迅雷,QQ,微信等
  • B/S模式(Brower/Server)浏览器与服务端
    打开浏览器就可以使用,不需要安装, 百度,淘宝,京东等

4.http模块

4.1http.get()方法?

  • get方法用于模仿客户端从服务器获取数据。
  • 代码示例:
http.get('url',function(res){
	//res 返回的res,接受服务器响应的所有内容
})
const http = require('http');

//get方式请求
http.get('http://baidu.com',res => {
    console.log(res);
})

5.网络服务器

5.1 服务器入门

  • 搭建一个简单的node服务器
/**
 * node.js服务器
 * 1.引入通信模块
 * 2.创建服务器
 * 3.监听request事件
 * 4.监听端口
 */

 const http = require('http');

 //创建服务器
 const server = http.createServer();

 //监听request的请求时间
 server.on('request',(req, res) => {
    //  req 请求对象  包含客户端请求的数据  请求头和请求体
    //  res 响应对象  包含了所有服务器端发送给客户端的数据,响应头和响应体
    res.setHeader('Content-Type','text/html;charset=utf-8');
    res.write('<h1> Hello Node.js</h1>');
    res.write('<p>今天礼拜五</p>');
    res.end();
 });

 //监听端口
 server.listen(88,() => {
     console.log('Server is running on 80......');
 })

5.2 根据不同的请求返回不同的数据

/**
 * 根据不同的请求,返回不同的数据
 * 根据用户请求的url不同,判断响应不同的数据,实现访问不同的url返回不同的结果
 * 核心:通过req.url   获取到用户请求的网址进行判断
 */

const http = require('http');

//创建服务器
const server = http.createServer();

//监听request的请求时间
server.on('request', (req, res) => {
    //  req 请求对象  包含客户端请求的数据  请求头和请求体
    //  res 响应对象  包含了所有服务器端发送给客户端的数据,响应头和响应体

    res.setHeader('Content-Type', 'text/html;charset=utf-8');
    if (req.url === '/') {
        res.write('<p>这是首页</p>')
    }

    if (req.url === '/article.html') {
        res.write('<p>文章列表</p>')
    }

    if (req.url === '/about.html') {
        res.write('<p>个人简介</p>')
    }
    res.end();
});

//监听端口
server.listen(88, () => {
    console.log('Server is running on 88......');
})

5.3 http的状态码

1.什么是状态码?

http协议规定的服务器响应数据时的状态编码,就是状态码。

2.常用的状态码
  • 1xx:表示普通消息,没有特殊含义
  • 2xx:表示服务器相应成功
    + 200 成功
  • 3xx:表示重定向
    + 301 永久重定向
    + 302 零时重定向
    + 304 使用缓存(服务器数据没有更新时)
  • 4xx: 无法范围跟
    + 403 权限不足,无法访问
    + 404 找不到
  • 5xx:服务器报错
    + 500 服务器代码出错
    + 502 网关错误
    + 501 服务已经奔溃

5.4 MIME类型

5.4.1 什么是MIME类型?

MIME类型可以认为是文件类型的表述。

5.4.2 常用的MIME类型
  • .html text/html
  • .css text/css
  • .js text/javascript
  • .png image/png
  • .mp3 audio/mpeg
  • .xml text/xml
  • .zip application/x-gzip
  • .pdf application/pdf
  • 代码演示
//生成一个html文件
res.writeHead(200,{"Content-Type":"text/html ; charset=utf-8"});

6.接受get方式和post方式的传值

  • 接收get方式的传值:

nodeJS 获取get方式的传值

1.数组方法 split 切割 获取

1.获取当前网址url
var url = http://www.login.com/index?name=kang&pass=kjh8619
2.存储获取的数据
var GET = {};     
3.利用数组方法切割url
1. var arr = url.split("?");

第一次切割
arr[0] = “http://www.login.com/index”
arr[1] = “name=kang&pass=kjh8619”

2. var arr2 = arr[1].split("&");

第二次切割
arr2[0] = “name=kang”
arr2[1] = “pass=kjh8619”

3. for(var i = 0; i < arr2.length; i++){
    var arr3 = arr2[i].split("=")
    GET[arr3[0]] = arr3[1];
}

第三次切割并且将获取到的数据保存到GET中。

4.打印出数据
console.log(GET);

输出结果为:

E:\node\get>node array
   { name: 'kang', pass: 'kjh8619' }

2.利用querystring获取get传值

1.引入querystring模块
var querystring = require("querystring");
2.获取到网址的url
var url = "http://www.login.com/index?name=kang&pass=kjh8619";
3.切割url
var arr = url.split("?");

arr[0] = “http://www.login.com/index”
arr[1] = “name=kang&pass=kjh8619”

4.存储数据
var json = querystring.parse(arr[1]);
5.打印数据
console.log(json);

结果:

[Running] node "e:\node\get\array.js"
 { name: 'kang', pass: 'kjh8619' }

3.利用url模块获取数据

1.引入url模块
var urlLib = require("url");
2.获取url
var url = "http://www.login.com/index?name=kang&pass=kjh8619";
3.解析url
var obj = urlLib.parse(url);
4.打印解析数据
console.log(obj);

结果:

[Running] node "e:\node\get\array.js"
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'www.login.com',
  port: null,
  hostname: 'www.login.com',
  hash: null,
  search: '?name=kang&pass=kjh8619',
  query: 'name=kang&pass=kjh8619',
  pathname: '/index',
  path: '/index?name=kang&pass=kjh8619',
  href: 'http://www.login.com/index?name=kang&pass=kjh8619' }

url模块解析url时,加入true参数可以同时解析qurey数据;

var urlLib = require("url");

var url = "http://www.login.com/index?name=kang&pass=kjh8619";

var obj = urlLib.parse(url,true);

console.log(obj.query);

结果:

[Running] node "e:\node\get\array.js"
[Object: null prototype] { name: 'kang', pass: 'kjh8619' }
  • 接收post方式传值:

nodeJS 获取post方式传值

因为get的数据值在地址中,大小限制为32k,而post的数据值在内容里面保存,所以数据量大,因此post传值为一段一段传输。

1.引入模块
1. const http = require("http");
2. const querystring = require("querystring");
2.搭建简易web服务器
var server = http.createServer(function(req, res){
//因为post传值为一段段,所以获取到所有的data后要串联起来,这里先以字符串串联为例子
    var str = "";
    
    req.on('data',function(data,){
        str += data;    //串联  data 数据
    });
    
    //获取完所有数据后执行req.on(‘end’,function(){})
    req.on('end',function(){
        var json = querystring.parse(str);
        console.log(json);
    })

})

server.listen(2021,function(){
    console.log("server is running");
})

3.form 表单做 post 提交数据
<form action="http://localhost:2022/aaa" method="POST">
    username: <input type="text" name="user"> <br>
    password: <input type="password" name="pass"> <br>
    <input type="submit" value="login">
4.结果
 { user: 'kang', pass: '123456' }

————————————————————————————————————
写在后面

隔壁孩子10篇博客node入门而且写了一个前后端分离项目,你怎么还在睡觉!!!(四)

express框架学习
express项目说明
express中的路由模块的讲解
响应的一些方法
一个简单的express项目
——————————————————————————————————
————————————————
————————————————

发布了85 篇原创文章 · 获赞 16 · 访问量 6080

猜你喜欢

转载自blog.csdn.net/qq_43955202/article/details/105152138