nodejs(四)核心模块

1,934 阅读7分钟

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模块,一步一步的创建我们自己的服务器

  1. 创建http-demo文件夹,在该文件夹下创建 server.js文件
  2. 引入http 模块
  3. 利用http模块对象,创建服务器
  4. 监听服务器的请求,当接受的服务器的请求的时候,打印请求的URL地址
  5. 指定服务器监听的端口号,指定服务器正常运行的回调函数
  6. 在http-demo文件夹下,打开命令行输入 node server.js 启动服务器
  7. 在浏览器通过指定的端口号,访问我们的服务器,可以随意输入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,返回給我们不同的数据文件,接下来我们就来实现这个功能

实现步骤:

  1. 在Demo的基础上,在服务器的监听函数的回调函数中,通过req参数获取URL
  2. 通过对URL的判断,返回不同的数据或者界面
  3. 这里需要说明的是,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:读文件

  1. 创建文件夹,并且在文件夹下创建一个存储模拟数据的文件
// db.json

{
    "students": [
        {
            "id": 1,
            "name": "Kobe",
            "age": 18,
            "hobbies": ["basketball","swimming","sleep"]
        },
        {
            "id": 2,
            "name": "James",
            "age": 18,
            "hobbies": ["basketball","music","eatting"]
        }
    ]
}
  1. 创建 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)
})
  1. 在readFile.js同级目录下运行如下命令,即可查看运行结果
    • 正确运行会在调试台打印我们students数组中的详细信息
node readFile.js

Demo2:先读,后写文件

  1. 在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属性转换为对象