————————————————————————————————————————————————————————————
----------------- 今日份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项目
——————————————————————————————————
————————————————
————————————————