学习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
可选参数, 可以指定以什么编码格式写入文件内容,默认是utf8callback
回调函数- 待写入的文件不存在时,会自动创建该文件
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服务器
基本步骤
- 导入
http
模块 - 创建web服务器实例
- 为服务器实例绑定
request
事件, 监听客户端的请求 - 启动服务器
// 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内容
核心步骤
- 获取请求的URL地址
- 设置默认的响应内容为 404 Not found
- 判断用户请求是否为
/
或/index.html
首页 - 判断用户请求的是否为
/about.html
页面 - 设置
Content-Type
响应头 , 防止中文乱码 - 使用
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教学视频整理的学习笔记