学习Node.js 第一天笔记Node.js常用内置模块,fs模块,path模块,http模块

fs文件系统模块

什么是fs文件系统模块

fs模块时node.js官方提供的 , 用来操作文件的模块 , 他提供了一系列的方法和属性 , 用来满足用户对文件的操作需求

例如

  • fs.readFile() , 用来读取指定文件中的内容
  • fs.writeFile() 用来向指定文件中写入内容

读取指定文件中的内容

fs.readFile(path,[options],callback);
  • path 必选参数, 表示文件的路径
  • options 可选参数 , 表示以什么编码格式来读取文件
  • callback 回调函数 , 通过此函数拿到读取的结果

使用fs模块的前提是在代码中导入该模块

const fs = require('fs');

使用fs.readFile()读取文件内容

const fs = require('fs');
fs.readFile('./files/test.txt','utf8',function(err,dataStr){
if(err){
return console.log('文件读取失败'+err.message);
}
console.log('文件读取成功'+dataStr);
})
/*
此处的回调函数有两个参数
第一个参数err : 是文件读取失败的返回值 ,
若文件读取成功则err=null,否则err为错误对象
第二个参数dataStr: 是文件内容字符串 ,
若文件读取成功 , 则dataStr是字符串,
若文件读取失败则是undefined
*/

向指定文件中写入内容

fs.writeFile(file,data,[options],callback);
  • file 文件路径
  • data 要写入的内容 , 是一个字符串
  • options 可选参数, 可以指定以什么编码格式写入文件内容,默认是utf8
  • callback 回调函数
  • 待写入的文件不存在时,会自动创建该文件
const fs = require('fs');
fs.writeFile('./files/test.txt', 'hello node.js!', function (err) {
if (err) {
return console.log('文件写入失败' + err.message);
}
console.log('文件写入成功');
}
)
/*
此处的回调函数只有一个err
err: 如果写入成功, 则err=null , 否则 err=一个错误对象
写入时会重新删除原来的内容
*/

注意:

  • fs.writeFile()只能用于创建文件, 不能用于创建路径
  • fs.writeFile() 新写入的内容会覆盖旧的内容

动态路径拼接

在使用fs.readFile() fs.writeFile() 方法时 , 若传入的参数是一个相对路径,即路径中带有./ 或者../ , 那么在执行时很容易发生错误

这是因为node命令是在当前目录下的一个命令,所以会发生错误

解决方案: 直接提供绝对路径

'd:\\test\\node\\hello.js'
这样的路径是一个写死的字符串, 且不易移植 , 维护性较差

那么可以使用一个专门的对象, 专门用来提供当前的绝对路径

__dirname 表示当前的绝对路径, 我们只需要拼接上待执行文件的文件名即可

console.log(__dirname);
fs.readFile(__dirname+'/file/test.txt');
但是使用加号也会出现拼接错误的问题
例如
fs.readFile(__dirname+'./file/test.txt');
console.log(__dirname+'./file/test.txt');
这样这个路径就变成了 d:\test\.\file\test.txt 这样显示是不正确的路径

接下来的path模块为我们提供了一个路径拼接的方法

path路径模块

什么是path路径模块

path模块是Node.js官方提供的, 用来处理路径的模块,他提供了一系列的方法和属性,用来满足用户对路径的处理需求

例如,常用的

  • path.join() 用来将多个路径片段拼接成一个完整的路径字符串
  • path.basename() 用来从路径字符串中, 将文件名解析出来

还是一样, 想要在代码中使用path模块, 需要导入

const path = require('path');

路径拼接

在上面讲到的__dirname时 , 使用+号 拼接也会出现问题, 那么path.join()就解决了这个问题

使用path.join() , 可以把多个片段拼接成一个完整的路径字符串

path.join([...paths]);
  • ...paths 多个路径的片段
  • 返回值是一个 string字符串
  • 使用path.join()就可以避免使用+号带来拼接路径错误
const path = require('path');
var pathStr = path.join('/a','/b/c','../','./d','e');
console.log(pathStr)
var pathStr2 = path.join(__dirname,'./files/test.txt');
console.log(pathStr2);
/*
会自动的去识别 ../ 和 ./
自动的完成拼接
*/

获取路径中的文件名

使用path.basename()方法可以获取路径中的最后一部分 , 经常通过这个方法获取路径中的文件名

path.basename(path[,ext]);
  • path 必选参数, 表示一个路径的字符串
  • ext 可选参数 , 表示文件拓展名, 指定了拓展名之后,就不会返回文件的后缀, 只返回文件名
  • 返回值一个string字符串
var fpath = '/a/b/c/index.html';
var fullName = path.basename(fpath);
console.log(fullName);
//输出index.html
var nameWithoutExt = path.basename(fpath,'.html');
console.log(nameWithoutExt);
//输出index

获取路径中的文件拓展名

使用path.extname()方法 , 可以获取路径中的拓展名部分

path.extname(path);
  • path必选参数 , , 路径的字符串
  • 返回一个string 字符串
const path = require('path')
var fext = path.extname(fpath)
console.log(fext);
//输出.html

http 模块

什么是http模块

首先要知道什么是客户端和服务器

在网络中, 负责消耗资源的电脑叫做 客户端 , 负责对外提供网络资源的电脑 , 叫做服务器

http 模块是Node.js官方提供的, 用于创建Web服务器的模块 , 通过调用提供的http.createServer()方法 , 就能方便的把电脑变成服务器 , 从而对外部提供Web资源

还是老样子 , 要想使用http模块, 需要导入

const http = require('http');

进一步了解http模块的作用

服务器和客户端的区别在于 , 服务器上安装了web服务器软件 , 例如: IIS , Apache , 通过安装这些服务器软件,就能把电脑变成服务器

在Node.js 中 , 我们不需要使用IIS, Apache等这些第三方web服务器软件

因为我们可以基于Node.js提供的http模块 , 通过简单的代码 , 就能轻松的手写一个服务器软件 ,

从而对外提供web服务

服务器相关的概念

IP地址

IP 地址就是互联网上每台计算机的唯一地址

常用的是IPv4的地址格式 , a.b.c.d ,其中每个字母都是0~~255之间的十进制整数

例如

  • 本地回环地址 127.0.0.1 , 代表本地主机
  • 路由地址192.168.0.1

注意

  • 互联网中的每台服务器 , 都有自己的IP地址 , 例如可以在终端中 ping www.baidu.com , 查看百度服务器的IP地址
  • 在开发期间 , 自己的电脑既可以是服务器, 也可以是客户端 , 可以在浏览器中输入127.0.01,把自己的电脑当做服务器访问

域名和域名服务器

IP地址不方便记忆, 不直观易懂 , 所以又出现了域名,例如www.baidu.com就是百度服务器IP地址的映射的域名 , 相对于百度的IP地址 , 域名更方便我们记忆理解,我们可以通过域名来访问百度的服务器

域名和IP地址是一一对应的关系 , 根据域名解析出对应的IP地址, 就需要用到一个域名服务器

注意

  • 单纯地使用IP地址 , 互联网中的电脑是能够正常工作的 , 但是有了域名 , 能够让互联网世界变得更加方便
  • 在开发测试期间 , 127.0.0.1 对应的域名就是localhost ,代指本机

端口号

电脑上的端口是用来放程序的地方 , 也可以理解为服务程序存放的端口

每个电脑上可以有很多服务,每个服务都对应一个端口

客户端发过来的网络请求, 通过端口号, 可以被准确地交给对应的Web服务进行处理

端口号就是用来辨别电脑上的端口

注意

  • 每个端口号不能同时被多个web应用占用
  • 在实际应用中 , 如果web服务器的端口号为80 , 则URL中的80端口可以被省略 , 只有80端口号是可以省略的, 其他不行!!!

创建最基本的Web服务器

基本步骤

  1. 导入http模块
  2. 创建web服务器实例
  3. 为服务器实例绑定request事件, 监听客户端的请求
  4. 启动服务器
// 1.导入http模块
const http = require('http')
// 2. 创建web服务器实例
const server = http.createServer();
// 3. 为服务器实例绑定request事件, 监听客户端请求
server.on('request',function(){
.....
})
//4.启动服务器,
server.listen(80,function(){
.,...
})

req请求对象

只要我们服务器接收到了客户端的请求, 就会调用通过server()为服务器绑定的request事件处理函数

如果想访问客户端相关的数据 或属性

server.on('request',(reg) => {
// req 是请求对象 , 他包含了客户端相关的数据和属性
// 例如 req.url 表示客户端请求的url地址
// req.method 是客户端请求类型
const str = `Your request url is ${req.url} , and request method is ${req.method}`
console.log(str)
})

res响应对象

在服务器的request事件处理函数中 ,如果想访问与服务器相关的数据或属性

server.on('request',(reg,res) => {
// res是响应对象 ,他包含了服务器相关的数据和属性
// 例如 ,要发送到客户端的字符串
//此处的req.url是 URL中端口号后面的部分
const str = `Your request url is ${req.url} , and request method is ${req.method}`
//res.end()方法的作用
// 向客户端发送指定的内容 , 并结束这次请求的处理
res.end(str);
})

解决中文乱码问题

当调用res.end()方法 ,向客户端发送中文内容的时候, 会出现乱码问题 , 因此需要手动设置内容的编码格式

server.on('request',(reg,res) =>{
//发送的内容中包含中文
const str = '您请求的地址是 ${req.url} , 请求的method类型是 ${req.method}'
// 为了防止中文乱码问题 , 需要手动设置响应头的编码格式
res.setHeader('Content-Type','text/html; charset=utf-8')
// 把包含中文的内容响应给客户端
res.end(str)
})

根据不同的URL响应不同的HTML内容

核心步骤

  1. 获取请求的URL地址
  2. 设置默认的响应内容为 404 Not found
  3. 判断用户请求是否为//index.html首页
  4. 判断用户请求的是否为/about.html页面
  5. 设置Content-Type响应头 , 防止中文乱码
  6. 使用res.end()把内容响应给客户端
server.on('request',(req , res)=>{
const url = req.url // 1. 获取请求地址
let content = '<h1>404 not found</h1>'//2.设置默认的内容
if(url === '/' || url === 'index.html')//3如果用户请求的是首页
{
content = '<h1>首页</h1>'
}else if(url === '/about.html'){//4. 如果用户请求的是关于页面
content='<h1>关于页面</h1>'
}
//5.设置响应头 , 防止中文乱码
res.setHeader('Content-Type','text/html; charset=utf-8');
//6.把内容发送给客户端
res.end(content);
})

声明

本人结合黑马程序员的Node.js教学视频整理的学习笔记

posted @   秋天Code  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示