Node.js
什么是Node.js
1.是一个基于Chorme V8引擎的JS运行时环境
2.可以理解为一个容器,用来运行代码环境,让JS有读写文件,操作数据库,开启服务器的能力
3.注意Node.js只是JS服务端运行环境,不是一门语言
与浏览器环境区别
浏览器是JS的前端运行环境,Node.js是JS的后端运行环境
🐇注意:
1.NodeJS有ECMAScript+内置模块(fs,http,path等)+第三方模块(别人开发)
2.Nodejs中没有DOM,也没有BOM,window对象
Node环境运行JS语法
1.新建一个JS文件
2.编写代码console.log(输入了
)
3.打开小黑窗输入node 01nodejs执行体验.js
🐇注意:
1.node后面要加空格
2.nodejs不能执行BOM,DOM。如编写alert(),会报错
常用命令与按键
🐇小黑盒的复制黏贴:
1.选中内容右键复制
2.小黑窗中右键可以直接黏贴复制的内容
一、fs模块
核心模块-文件读取fs
核心模块:就是nodejs自带的模块
导入语法:const 变量名 = require(核心模块名
)
fs.readFile异步读取文件
const fs = require(`fs`) // 导入
fs.readFile(`./文件.txt`,(err,data)=>{
console.log(err); // 错误对象,如果读取成功 值为null
console.log(data.toString()); // 读取到的数据 读取失败 值为undefined
}) // 调用
/* 🐇不导入调用不了 err和data是二选一的 data如果不调用to String 出现一个数组的东西 */
const fs = require(`fs`)
fs.readFile(`./文件.txt`,(err,data)=>{
// 简写if 如果err ture 就return 然后输入log
if(err) return console.log(`文件读取错误`);
// 如果 err false 就执行这段代码
console.log(data.toString());
console.log(`111`);
})
console.log(`222`);
fs.readFile(`./文件.txt`,(err,data)=>{
console.log(`333`);
})
console.log(`444`);
// 🐇 对于异步读取顺序 不一定是从上到下 根据读取文件大小 回调时间不同决定
🐇注意:
1.异步顺序问题有时不一样是谁在上就先执行,和文件大小有关,文件大返回慢,就慢输出
2.读取文本内容的文件,加utf8,读取非文本内容的文件,不加utf8
3. 如果不用utf8,就用toString()
fs.readFileSync同步读取文件
const fs = require(`fs`)
const data = fs.readFileSync(`./文件.txt`) // 同步读取 场景:文件非常大,需要严格按顺序就用同步,一般用异步。
console.log(`111`);
console.log(data.toString());
console.log(`222`);
try{}catch{}处理同步读取文件错误
const fs = require(`fs`)
try {
const data = fs.readFileSync(`./文件1.txt`)
console.log(data.toString());
console.log(`123`);
} catch (error) {
console.log(`文件读取错误`);
}
try {
const data = fs.readFileSync(`./文件.txt`)
console.log(data.toString());
console.log(`123`);
} catch (error) {
console.log(`文件读取错误`); // 文件读取成功不会执行到这里 跳过
}
fs.writeFile异步写入文件
const fs = require(`fs`)
fs.writeFile(`./文件1.txt`,`邱某还是傻逼`,err=>{
if(err) return console.log(`写入失败`);
console.log(`写入成功`);
})
/*
🐇 注意事项:
1.覆盖写入
2.如果文件不存在,尝试自动添加文件。添加不了就报错!
*/
const fs = require(`fs`)
const arr = [{id:`1`},{id:`2`}]
fs.writeFile(`./data.json`,JSON.stringify(arr),err=>{
if(err) return console.log(`写入失败`);
console.log(`写入成功`);
})
/*
🐇 注意事项
fs.writeFile 第二个参数格式要求是字符串 buffer
用JSON.stringify()转换成 JSON字符串
*/
🐇总结:
1.同步:多个功能按先后顺序,优缺点:如果前面任务执行太久会阻止后面任务的执行,降低程序执行性能,有点视编程方式简单,易于理解
2.异步:发出一个功能,不管有没有得到结果,都继续往下执行,优缺点:不会造成堵塞,提升了程序执行性能,缺点是编程方式复杂,理解难度高,会形成回调函数的嵌套,或者因文件大小造成执行顺序不同问题。
fs.writeFileSync同步写入文件(了解)
二、http模块
服务器
1.提供网络服务的机器,服务器=电脑+给其他电脑提供服务的软件
2.提供服务的是服务器,享受服务的是客户端
3.WEB服务器学习重点,提供图片/视频等服务的服务器
IP,域名,端口
1.ip作用是标识一个网络设备在某一个具体网络中的地址,唯一的
2.域名就是ip地址的别名,由于ip不好记忆,就取了好记的名字如www.badu.com
3.域名是要购买的
4.端口可以理解为:如果服务器是大商城,端口就是商铺。
5.服务器要提供服务必须通过指定端口
6.客户端与服务器需要通过特定端口通信
7.有些端口
1.导入模块
2.创建服务
3.监听服务
// 1.导入http模块
const http = require(`http`)
// 2.创建一个服务 可以看成是一个事件 访问就触发
// req request 请求 - res response 响应
let server = http.createServer((req, res) => {
console.log(`接收到了客户端请求`);
res.end(`qiumousb`) // 响应一个OK
})
// 3.开启监听,占用一个端口
// 监听8001端口 启动web服务器等待客户端请求
server.listen(8001,()=>{
console.log(`web服务器准备,可以访问`);
})
// 浏览器输入 127.0.0.1:8001 页面会有 OK
🐇 总结
1.发送http请求(浏览器享受服务) 浏览器输入127.0.0.1:8001
2.服务器响应(提供服务) 响应->OK
3.如果关闭F5 就不能享受到服务->没有提供服务->没有运行起来
4.127.0.0.1是本机访问,还有局域网访问或外网访问
判断当输入不同url 响应不同内容
// 判断当输入不同url 响应不同内容
const http =require(`http`)
const server= http.createServer((req,res)=>{
// 判断URL地址 响应不同内容
if(req.url===`/`){
res.end(`Hello Index`)
}else if(req.url===`/joke`){
res.setHeader("Content-Type","text/html;charset=utf8") // 解决中文乱码
res.end(`/joke 讲个笑话😀`)
}else{
res.end(`404`)
}
})
server.listen(8001,()=>{
console.log(`服务器成功`);
})
🚨注意:写了多个res.end 被调用会导致服务器崩掉