# 一、复习
1、前端
- 环境:操作系统,浏览器
- 前端收:浏览器
发:表格、浏览器
2、后端
- 服务器:提供了概念或数据服务
- 环境:服务器对应语言的解析器:nodeJs的node
- 端口:计算机对外进行数据交互的接口
- 将服务器程序挂在某个端口上,才能被客户端访问或拦截访问
3、搭建本地服务器环境
- 安装node
- 直接执行
- 文件执行
4、命令行工具的常见命令
- 清屏:cls或者clear
5、nodeJs的模块
- 内置:
- 引入:const obj=require("模块名")
- 使用:
6、node的内置模块
- http
- fs:文件系统,提供了文件操作
- url:地址模块,用来解析url地址
# 二、内置模块 -http
1、创建服务对象
- 创建一个后端(服务器)
http模块用来开启服务器
- 定义服务器程序
const serverObj = http.createServer((req, res)=>{
参数1:表示请求对象:前端到后端的信息,request
参数2:表示响应对象:后端到前端的信息,response
2、挂载端口
- xxx.listen(3000,function(){
console.log("服务器开启成功,端口为3000");
});
- 本地服务器的默认地址:
localhost:3000或127.0.0.1:3000
3、获取请求对象
- 解析url
const p = "." + url.parse(req.url).pathname;
4、结束
- 结束本次请求
res.end();
4、能响应静态资源的简易web服务器
function apiHandle(req, res){
// 区分是什么功能:二级路由
if(req.url.includes("/login")){
// 执行登录功能
}
if(req.url.includes("/register")){
// 执行注册功能
}
if(req.url.includes("/user")){
// 执行获取用户信息功能
}
}
设定二级路由
// http://localhost:3000/api?type=register
function apiHandle(req, res){
// 1. get 或 post
// console.log(req.method);
// 接收并解析前端发送过来的数据
if(req.method === "GET"){
// 2. 如果是get数据,数据在url后拼接,解析url即可
const data = url.parse(req.url, true).query;
// 6-1. 然后,再根据数据的不同,进行二级路由处理
routerHandle(req, res, data);
}else if(req.method === "POST"){
// 3. 没有在url拼接,不能通过解析url拿到数据,通过事件获取数据
// 4. 当前端使用post方式发送数据时,会触发req的data事件
// 但是data事件每次只能拿到一个数据碎片,有可能多次执行才能拿到所有数据碎片
// 为了拿到完整数据,需要在每次data事件被触发时将获取到的数据碎片拼接起来
let str = "";
req.on("data", (chunk)=>{
str += chunk;
});
// 5. 在最后一次data事件执行完毕后,必然会触发一次end事件
// 在end事件中即可绝对拿到拼接完整的数据
req.on("end",()=>{
const data = dataParse(str);
// 6-2. 然后,再根据数据的不同,进行二级路由处理
routerHandle(req, res, data);
})
}
}
}
# 三、内置模块 - querystring
const qs = require("querystring");
1、将查询字符解析成对象
- qs.parse(str)
2、将对象解析成查询字符
- qs.stringify(obj)
3、
//自定义的查询数据解析工具
function dataParse(str){
const obj = {};
// abc=678&qwe=456
str.split("&").forEach(val=>{
obj[val.split("=")[0]] = val.split("=")[1];
})
return obj;