nodejs核心模块
之前我们介绍了,nodejs中是分模块的,我们在nodejs中需要用的工具包,都是通过引入第三方包模块来完成的,本章,我们将详细介绍nodejs中使用的最多的几种核心模块,并且,通过这几个核心模块的学习,掌握自己去nodejsAPI中学习其它模块的能力
[TOC]
一. nodejs中的核心模块介绍
nodejs中使用的最多的核心模块主要有以下几个
- fs:提供对文件的读写等操作
- http:提供了搭建本地服务器的API
- path:提供文件路径操作的API
- os:操作系统相关信息的API
- url:提供了操作URL信息的API
二. 核心模块的使用
2.1 http 模块
http模块通常给我们用来创建本地的服务器,我们可以借助该模块提供的API,很轻松的在本地创建自己的服务器,并自己书写服务器的逻辑
简单的说,就是我们在浏览器输入一个URL地址的时候,就是在向服务器请求数据,服务器接收到URL之后,会执行一系列的逻辑处理,最后返回给我们响应的文件
Demo1:
接下来,我们将使用http模块,一步一步的创建我们自己的服务器
- 创建http-demo文件夹,在该文件夹下创建 server.js文件
- 引入http 模块
- 利用http模块对象,创建服务器
- 监听服务器的请求,当接受的服务器的请求的时候,打印请求的URL地址
- 指定服务器监听的端口号,指定服务器正常运行的回调函数
- 在http-demo文件夹下,打开命令行输入 node server.js 启动服务器
- 在浏览器通过指定的端口号,访问我们的服务器,可以随意输入URL,查看控制台的打印内容
代码示例:
//1. 引入http模块
const http = require('http')
//2. 通过http对象,创建服务器
const app = http.createServer()
//3. 监听服务器的请求,并打印请求的URL地址
app.on('request',(req,res)=>{
console.log(req.url)
})
//4. 指定服务器监听的端口号,以及服务器正常启动之后的回调函数
app.listen(3000,()=>{
console.log('Server is runnin on localhost:3000...')
})
| 输入 | 控制台打印 |
|---|---|
| localhost:3000 | / |
| localhost:3000/hello | /hello |
| localhost:3000/http-demo | /http-demo |
完成以上Demo之后,我们可以在该项目的基础上,优化我们的服务器
Demo2:
一般我们访问服务器的时候,服务器会根据我们访问的URL,返回給我们不同的数据文件,接下来我们就来实现这个功能
实现步骤:
- 在Demo的基础上,在服务器的监听函数的回调函数中,通过req参数获取URL
- 通过对URL的判断,返回不同的数据或者界面
- 这里需要说明的是,app.on方法的回调函数,接收两个参数,分别包包含请求对象和响应对象的相关信息
- req:请求对象相关信息
- res:响应对象相关信息
- res.end():该方法可以返回给浏览器指定的内容
//1. 引入http模块
const http = require('http')
//2. 通过http对象,创建服务器
const app = http.createServer()
//3. 监听服务器的请求,并打印请求的URL地址
app.on('request',(req,res)=>{
//5. 获取URL
var url = req.url
//6. 通过对URL的判断,返回给浏览器不同的信息
if(url === '/' || url === '/home'){
res.end('Welcom to login page')
}else if(url === '/login'){
res.end('Come to login your accout')
}else if(url === '/register'){
res.end('you can Register your accout in there')
}else{
res.end('404 Not found...,please try out')
}
})
//4. 指定服务器监听的端口号,以及服务器正常启动之后的回调函数
app.listen(3000,()=>{
console.log('Server is runnin on localhost:3000...')
})
- 完成以上代码之后,使用
node 文件名命令启动服务器,然后我们在浏览器输入URL地址,即可看到如下结果

看到以上效果,即完成了我们Demo2的练习
**:collision:拓展:**根据不同的URL,返回不同的前端界面,即把文字变成我们的html文件,思考这个该如何实现?
2.2 fs 模块
fs模块用来实现对文件的一些读写操作,它包含很多对文件读写操作相关的API,使我们能够通过js代码,来很便捷的实现对文件的各种处理
Demo1:读文件
- 创建文件夹,并且在文件夹下创建一个存储模拟数据的文件
// db.json
{
"students": [
{
"id": 1,
"name": "Kobe",
"age": 18,
"hobbies": ["basketball","swimming","sleep"]
},
{
"id": 2,
"name": "James",
"age": 18,
"hobbies": ["basketball","music","eatting"]
}
]
}
- 创建 readFile.js
// readFile.js
// 引用fs模块
const fs = require('fs')
// 调用fs模块中读取文件的方法,该方法接收两个参数
// 第一个参数是要读取文件的地址,第二个参数为回调函数
// 回调函数第一个参数为错误信息对象,如果读取报错,错误信息将包含在该文件中,第二个参数是读取成功返回的数据
// 数据以二进制的方式返回,可以通过 data.toStrin()方法转换为字符串
fs.readFile('./db.json',(error,data)=>{
if(error){
return console.log('readFile failed,please contact manager...')
}
// 这里将字符串转换为Json对象,并且直接获取Json对象中的 students属性
return console.log(JSON.parse(data).students)
})
- 在readFile.js同级目录下运行如下命令,即可查看运行结果
- 正确运行会在调试台打印我们students数组中的详细信息
node readFile.js
Demo2:先读,后写文件
- 在Demo1的基础上,增加如下代码即可
//readFileThenWrite.js
// 引用fs模块
const fs = require('fs')
// 调用fs模块中读取文件的方法,该方法接收两个参数
// 第一个参数是要读取文件的地址,第二个参数为回调函数
// 回调函数第一个参数为错误信息对象,如果读取报错,错误信息将包含在该文件中,第二个参数是读取成功返回的数据
// 数据以二进制的方式返回,可以通过 data.toStrin()方法转换为字符串
fs.readFile('./db.json',(error,data)=>{
if(error){
return console.log('readFile failed,please contact manager...')
}
// 这里将字符串转换为Json对象,并且直接获取Json对象中的 students属性
// return console.log(JSON.parse(data).students)
//将二进制码转换为字符串
const students = data.toString()
// 通过fs的writeFile方法,向文件中写入数据
// writeFile包含三个参数:
// 第一个,写入文件的路径(如果不存在,会帮我们自动创建,如果存在,则会覆盖文件中的内容
// 第二个:要写入的数据
// 第三个,错误信息的回调函数
fs.writeFile('./copy.json', students, (err) => {
if (err) throw err;
console.log('The file has been saved!');
});
})
2.3 path和os
path模块
path 模块通常用来操作文件的路径,这里简单介绍几个常见API的使用,详细信息参考nodejs官网,path模块
在使用之前引入path模块即可使用相关API
const path = require('path')
通用路径介绍:
__dirname:获取当前执行文件所在目录的完整的路径名
__filename:获取当前执行文件的绝对路径,带有文件名以及文件拓展名
process.cwd():获取当前执行node命令时候的文件夹目录名
// pathDemo.js
const path = require('path')
var dirname = path.resolve(__dirname)
var filename = path.resolve(__filename)
var curDir = process.cwd()
console.log('__dirname====',dirname)
console.log('__filename====',filename)
console.log('doNodeDir====',curDir)
输出:
__dirname==== C:\Users\admin\Desktop\work\ForStudy\8.Node.js\DemoFolder\核心模块-path-os
__filename==== C:\Users\admin\Desktop\work\ForStudy\8.Node.js\DemoFolder\核心模块-path-os\pathDemo.js
doNodeDir==== C:\Users\admin\Desktop\work\ForStudy\8.Node.js\DemoFolder\核心模块-path-os
常见API:
-
path.resolve([...paths]):将路径片段解析为一个文件的绝对路径
-
即执行该方法返回的路径,会自动在参数地址前加上当前执行文件目录路径
-
**path.join([...paths]):**拼接参数路径并返回
-
**path.basename():**返回给定路径的最后一部分
path.basename('/foo/bar/baz/asdf/quux.html'); // 返回: 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html'); // 返回: 'quux' -
path.extname(path):返回文件的拓展名
-
... 更多内容,参考nodejs官网,path模块
os模块
提供了操作系统相关的方法
API:Nodejs官网:os模块
2.4 URL模块
URL 模块用来处理和解析URL,通常会将URL解析成一个对象,该对象包含URL的完整信息
- 使用
url.parse(url)来转换URL

- 在
url.parse()方法中添加第二个参数,将query属性转换为对象

- 更多URL模块的API参考 Nodejs官网:URL模块