Node.js与内置模块(fs文件系统、path路径模块、http服务器模块)

系列文章目录

第二章:Nodejs模块化(npm与包、开发自己的包、模块加载机制)
第三章:Nodejs之Express(基本使用、Express路由)(一)
第四章:Nodejs之Express( Express 中间件、中间件的分类、自定义中间件)(二)
第五章:Nodejs之解决接口跨域问题
第六章:Nodejs操作Mysql数据库
第七章:Node之前后端身份认证(Session认证机制、JWT 认证机制)
第八章:Nodejs之egg基本使用(初始化项目、内置对象、egg路由、egg控制器)
第九章:Nodejs之egg基本使用(egg服务、egg-mysql、CSRF漏洞、egg-jwt、Swagger)



一、Node.js 简介

1.什么是Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境
Node.js 的官网地址: https://nodejs.org/zh-cn/

2.Node.js 中的 JavaScript 运行环境

在这里插入图片描述

浏览器是 JavaScript 的前端运行环境
Node.js 是 JavaScript 的后端运行环境
Node.js 无法调用 DOM 和 BOM 等浏览器内置 API

3. Node.js 可以做什么

Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的功能和 API。
① 基于 Express 框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
② 基于 Electron 框架(https://electronjs.org/),可以构建跨平台的桌面应用
③ 基于 restify 框架(http://restify.com/),可以快速构建 API 接口项目
④ 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…


二、fs文件系统

fs 是 filesystem 的缩写,该模块提供本地⽂件的读写能⼒,这个模块⼏乎对所有操作提供异步和同步两种操作⽅式,供开发者选择。

如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:

const fs = require('fs')

1.读取指定文件中的内容

  • fs.readFile() 异步读取文件

语法:

fs.readFile(path[, options], callback)

参数1必选参数,字符串,表示文件的路径
参数2:可选参数,表示以什么编码格式来读取文件,一般默认指定 utf8
参数3必选参数,回调函数,拿到读取失败和成功的结果 。回调函数中也有两个参数,第⼀个参数是发⽣错误时的错误对象,第⼆个参数是代表⽂件内容的 Buffer 实例

代码示例:

// 1. 导入 fs 模块,来操作文件
const fs = require('fs')

// 2. 调用 fs.readFile() 方法读取文件
fs.readFile('./files/11.txt', 'utf8', function(err, data) {
    // 2.1 打印失败的结果
    // 如果读取成功,则 err 的值为 null
    // 如果读取失败,则 err 的值为 错误对象,data 的值为 undefined
    if(err){
    	return ;
    }
    // 2.2 打印成功的结果
    console.log(data)
})
  • readFileSync() 同步读取⽂件
    返回⼀个Buffer实例。

语法:

fs.readFileSync(path[, options])

参数1:是⽂件路径。
参数2:可以是 ⼀个表示配置的对象,也可以是⼀个表示⽂本⽂件编码的字符串。默认的配置对象是 { encoding: null, flag: ‘r’ } ,即⽂件编码默认为 null ,读取模式默认为 r (只读)。

代码示例:

let txt = fs.readFileSync("./files/1.txt", 'utf8');//将读取的内容赋值给txt

2.向指定的文件中写入内容

  • fs.writeFile() 异步写⼊⽂件。

语法:

fs.writeFile(file, data[, options], callback)

参数1必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2必选参数,表示要写入的内容
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8
参数4必选参数,文件写入完成后的回调函数

代码示例:

// 1. 导入 fs 文件系统模块
const fs = require('fs')

// 2. 调用 fs.writeFile() 方法,写入文件的内容
fs.writeFile('./files/3.txt', 'ok123', function(err) {

  // 2.1 如果文件写入成功,则 err 的值等于 null
  // 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
  if (err) {
    return console.log('文件写入失败!' + err.message)
  }
  console.log('文件写入成功!')
})

  • writeFileSync() 同步写⼊⽂件

语法:

fs.writeFileSync(file, data[, options])

参数1必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
参数2必选参数,表示要写入的内容
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8

代码示例:

let x = fs.writeFileSync("./files/3.txt", "这是通过writeFiles写入的")

3.扩展

在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 …/ 开头的相对路径时,很容易出现路径动态拼接错误的问题。

原因:可以直接提供一个完整的文件存放路径
解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。

__dirname 表示当前文件所处的目录

代码示例:

fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
  if (err) {
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
})

三、 path 路径模块(常用)

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

如果要在 JavaScript 代码中,使用 path 模块来处理路径,则需要使用如下的方式先导入它:

const path = require('path')

1. path.join() 路径拼接

语法:

path.join([...paths])

代码示例:

const path = require('path')
// 注意:  ../ 会抵消前面的路径
 const pathStr = path.join('/a', '/b/c', '../../', './d', 'e')
 console.log(pathStr)  // \a\b\d\e

2. path.basename() 获取路径中的文件名

语法:

path.basename(str[, ext]))

代码示例:

const path = require('path')

// 定义文件的存放路径
const fpath = '/a/b/c/index.html'

const fullName = path.basename(fpath)
console.log(fullName) //index.html

const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt) //index

3. path.extname() 获取路径中的文件扩展名

语法:

path.basename(str[, ext]))

代码示例:

const path = require('path')

// 这是文件的存放路径
const fpath = '/a/b/c/index.html'

const fext = path.extname(fpath)
console.log(fext)//.html

4.path.dirname() 返回路径中⽂件夹的部分

语法:

path.dirname(path)

代码示例:

const path = require('path')

// 这是文件的存放路径
const fpath = '/a/b/c/index.html'

const fext = path.dirname(fpath)
console.log(fext)// /a/b/c/

四、url地址模块

提供解析url的⼯具,⼀个完整的href结构如下:

1 url.parse()

将url字符串地址转换为URL对象

const url = require('url')
let res = url.parse('http://admin1:123321@sub.briup.com:8080/user/login?page=1&pageSize=10#hash');
console.log(res);

运行结果:
在这里插入图片描述

2 url.searchParams()

获取表示⽹址查询参数的 URLSearchParams URLSearchParams 对象。此属性是只读的。

const myURL = new URL('https://example.com/some/path?
page=1&format=json');
console.log(myURL.searchParams); // URLSearchParams { 'page' =>
'1', 'format' => 'json' }
console.log(myURL.searchParams.get('page')); //1
console.log(myURL.searchParams.get('format'));//json

五、http 服务器模块

http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer() 方法,就能把一台普通的电脑变成一台 Web 服务器,从而对外提供 Web 资源服务。

如果要希望使用 http 模块创建 Web 服务器,则需要先导入它:

const http = require('http')

1.服务器相关概念

  • ip地址
    IP 地址就是互联网上每台计算机的唯一地址,因此 IP 地址具有唯一性
    IP 地址的格式:通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d 都是 0~255 之间的十进制整数。例如:192.168.1.1

  • 域名和域名服务器

    • IP 地址能够唯一地标记网络上的计算机,但不便于记忆,于是人们又发明了另一套字符型的地址方案,即所谓的域名地址

    • IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS)的电脑中。域名服务器就是提供 IP 地址和域名之间的转换服务的服务器

  • 端口
    在一台电脑中,可以运行成百上千个 web 服务。每个 web 服务都对应一个唯一的端口号。客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的 web 服务进行处理。
    注意:
    ① 每个端口号不能同时被多个 web 服务占用。
    ② 在实际应用中,URL 中的 80 端口可以被省略

2.创建最基本的 web 服务器

步骤1 :导入 http 模块。
步骤2 :调用 http.createServer() 方法,即可快速创建一个 web 服务器实例。
步骤3:为服务器实例绑定 request 事件,即可监听客户端发送过来的网络请求。
步骤4:调用服务器实例的 .listen() 方法,即可启动当前的 web 服务器实例。

代码示例:

// 1. 导入 http 模块
const http = require('http')
// 2. 创建 web 服务器实例
const server = http.createServer()

// 3. 为服务器实例绑定 request 事件,监听客户端的请求
server.on('request', function (req, res) {
  console.log('Someone visit our web server.')
})
// 4. 启动服务器
server.listen(8080, function () {  
  console.log('server running at http://127.0.0.1:8080')
})

3. req 请求对象

req 是请求对象,包含了与客户端相关的数据和属性

  • req.url 是客户端请求的 URL 地址 ;
  • req.method 是客户端请求的 method 类型;

代码示例:

const http = require('http')
const server = http.createServer()
    // req 是请求对象,包含了与客户端相关的数据和属性
server.on('request', (req, res) => {
    // req.url 是客户端请求的 URL 地址
    const url = req.url
        // req.method 是客户端请求的 method 类型
    const method = req.method
    const str = `url:${url},method: ${method}`
    console.log(str)
})
server.listen(80, () => {
    console.log('server running at http://127.0.0.1')
})

上述代码执行后,在浏览器中访问http://127.0.0.1/index.html,控制台输出:url: /index.html, method: GET

4. res 响应对象

res是响应对象,包含了与服务器相关的数据或属性

  • res.end() 将内容响应给客户端
  • res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码的问题。

代码示例:

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  // 定义一个字符串,包含中文的内容
  const str = `您请求的 URL 地址是 ${req.url},请求的 method 类型为 ${req.method}`
  // 调用 res.setHeader() 方法,设置 Content-Type 响应头,解决中文乱码的问题
  res.setHeader('Content-Type', 'text/html; charset=utf-8')
  // res.end() 将内容响应给客户端
  res.end(str)
})

server.listen(80, () => {
  console.log('server running at http://127.0.0.1')
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值