NodeJS 第一天

71 阅读5分钟

Node.js

什么是Node.js

​ 1.是一个基于Chorme V8引擎的JS运行时环境

​ 2.可以理解为一个容器,用来运行代码环境,让JS有读写文件,操作数据库,开启服务器的能力

​ 3.注意Node.js只是JS服务端运行环境,不是一门语言

1652098805104

与浏览器环境区别

​ 浏览器是JS的前端运行环境,Node.js是JS的后端运行环境

1652098841283

🐇注意

​ 1.NodeJS有ECMAScript+内置模块(fs,http,path等)+第三方模块(别人开发)

​ 2.Nodejs中没有DOM,也没有BOM,window对象

Node环境运行JS语法

​ 1.新建一个JS文件

​ 2.编写代码console.log(输入了)

​ 3.打开小黑窗输入node 01nodejs执行体验.js

1652098999432

🐇注意

​ 1.node后面要加空格

​ 2.nodejs不能执行BOM,DOM。如编写alert(),会报错

常用命令与按键

1652099111478

🐇小黑盒的复制黏贴

​ 1.选中内容右键复制

​ 2.小黑窗中右键可以直接黏贴复制的内容

一、fs模块

核心模块-文件读取fs

​ 核心模块:就是nodejs自带的模块

​ 导入语法:const 变量名 = require(核心模块名)

1652099225658

fs.readFile异步读取文件

1652099851390

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`);

// 🐇 对于异步读取顺序 不一定是从上到下 根据读取文件大小 回调时间不同决定

1652099360443

🐇注意

​ 1.异步顺序问题有时不一样是谁在上就先执行,和文件大小有关,文件大返回慢,就慢输出

​ 2.读取文本内容的文件,加utf8,读取非文本内容的文件,不加utf8

​ 3. 如果不用utf8,就用toString()

fs.readFileSync同步读取文件

1652099903228

const fs = require(`fs`)
const data = fs.readFileSync(`./文件.txt`) // 同步读取 场景:文件非常大,需要严格按顺序就用同步,一般用异步。
console.log(`111`);
console.log(data.toString());
console.log(`222`);

1652099333900

try{}catch{}处理同步读取文件错误

1652100071130

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异步写入文件

1652099912515

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同步写入文件(了解)

1652099919971

二、http模块

服务器

​ 1.提供网络服务的机器,服务器=电脑+给其他电脑提供服务的软件

​ 2.提供服务的是服务器,享受服务的是客户端

3.WEB服务器学习重点,提供图片/视频等服务的服务器

1652100613481

IP,域名,端口

​ 1.ip作用是标识一个网络设备在某一个具体网络中的地址,唯一的

​ 2.域名就是ip地址的别名,由于ip不好记忆,就取了好记的名字如www.badu.com

​ 3.域名是要购买的

​ 4.端口可以理解为:如果服务器是大商城,端口就是商铺。

1652100807826

​ 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 被调用会导致服务器崩掉