Node.js 学习 内置模块

2022.11.17

简介

Node.js是JavaScript的后端运行环境(runtime),类比浏览器是JavaScript的前端运行环境。Node.js使用的是Chrome的V8解析引擎,除了解析引擎外,还包含了一些内置的API:fs模块、path模块、http模块、etc……

// Node.js 是用 C++ 写的,V8 引擎也是

fs 文件系统模块

读取文件: fs.readFile(path, [options], callback)

可选参数options表示以什么编码格式读取文件,默认为UTF8。

const fs = require('fs')

fs.readFile('./assets/demo1.txt', function(err, result) {
  if(err) {
    return console.log('文件读取失败!' + err.message)
  }
  console.log('文件读取成功!' + result)
})

写入文件: fs.writeFile(path, data, [options], callback)

const fs = require('fs')

fs.writeFile('./assets/demo2.txt', 'Hello Node.js!', function(err, result) {
  if(err) {
    return console.log('文件写入失败!', err.message)
  }
  console.log('文件写入成功!')
})

注意:

  • 使用 fs 模块操作文件的时候,若使用相对路径,可能会出现路径动态拼接错误。这是因为代码在执行的时候,会以执行 node 命令时所处的目录,动态地拼接出被操作文件的完整绝对路径。所以 fs 模块中的路径尽量使用 __dirname + 相对路径拼接的形式,__dirname 表示当前代码文件所处的目录。
  • fs.write() 只能创建文件,而不能创建路径。即路径必须是提前就存在的,否则报错
  • 重复调用 fs.write() 写入同一个文件,会覆盖之前写入的内容
fs.readFile(__dirname + '/assets/demo1.txt', function(){})

path 路径模块

拼接路径: path.join()

const path = require('path')

// ../会抵消前面的一个路径
const pathStr = path.join('/a', '/b/c', '../', './d', '/e')
console.log(pathStr)  // 输出:/a/b/d/e

fs中的拼接路径的推荐写法:

fs.readFile(path.join(__dirname, '/assets/demo1.txt'), function(){})

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

const fpath = '/a/b/c/index.html'

var fullname = path.basename(fpath)
console.log(fullname)  // 输出index.html

var nameWithoutExt = path.basename(fpath, '.html')

http 模块

const http = require('http')

// 创建 Web 服务器实例
const server = http.createServer()

// 绑定 request 事件,监听客户端的请求并响应
server.on('request', function(req, res) {
    console.log('url:', req.url, ', method:', req.method)
    // do something...
    res.setHeader('Content-Type', 'text/html; charset=utf8')
    res.end('Hello Node.js, 这是一段中文字符。')
})

// 监听端口,启动服务器
server.listen(80, function() {
    console.log('Server running at http://127.0.0.1:80') // 80端口可省略
})

request 事件会在服务器接收到客户端的请求时触发,回调函数中的 req 是请求对象,包含客户端请求时的相关数据和属性。res 是响应对象,包含服务器响应时的相关数据和属性。但是响应数据中如果存在中文,会出现乱码的情况,我们需要在响应头中手动设置内容的编码格式。

可以通过判断 req.url 来简单处理后端路由。

模块化 & npm 包

Node.js 中默认使用 CommonJS 模块化规范。

其他略……