nodejs基本使用

2023-03-10 14:41:46 浏览数 (1)

Node.js黑马教程学习总结

# Node.js简介

  Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。

  Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。

  Node.js 的官网地址: https://nodejs.org/zh-cn (opens new window)

# Node.js可以做什么

Node.js 作为一个 JavaScript 的运行环境,仅仅提供了基础的功能和 API。然而,基于 Node.js 提供的这些基础能,很多强大 的工具和框架如雨后春笋,层出不穷,所以学会了 Node.js ,可以让前端程序员胜任更多的工作和岗位:

  • 基于 Express 框架 http://www.expressjs.com.cn (opens new window),可以快速构建 Web 应用
  • 基于 Electron 框架 https://electronjs.org (opens new window),可以构建跨平台的桌面应用
  • 基于 restify 框架 http://restify.com (opens new window),可以快速构建 API 接口项目
  • 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…

# fs 文件系统模块

导入使用:

代码语言:javascript复制
const fs = require('fs')

# readFile()

读取指定文件中的内容

语法:

代码语言:javascript复制
const fs = require('fs')
fs.readFile(path,option,callback)
  • path:必选参数,字符串,表示文件的读取路径
  • option:可选参数,表示以什么编码格式来读取文件
  • callback:必选参数,文件读取完成后,通过回调函数拿到读取的结果

例子:

代码语言:javascript复制
fs.readFile('./test.txt', 'utf8', function(err, dataStr) {
  // 如果读取成功,则 err 的值为 null
  // 如果读取失败,则 err 的值为 错误对象,dataStr 的值为 undefined
  console.log(err)
  console.log('-------')
  //  打印成功的结果
  console.log(dataStr)
})

判断文件是否读取成功

代码语言:javascript复制
const fs = require('fs')
fs.readFile('./1.txt','utf8',function(err,res){
// if(err==null){
//     return console.log('文件读取成功' res)
// }else{
//     return console.log('文件读取失败' err)
// }
if(err){
    return console.log('文件读取失败' err)
}
    return console.log('文件读取成功,内容是' res)
//    
})

# writeFile()

向指定的文件中写入内容

语法:

代码语言:javascript复制
const fs = require('fs')
fs.writeFile(path,data,option,callback)
  • path:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径
  • data:必选参数,表示要写入的内容
  • option:可选参数,表示以什么格式写入文件内容,默认值是 utf8
  • callback:必选参数,文件写入完成后的回调函数

例子:

代码语言:javascript复制
// 1. 导入 fs 文件系统模块
const fs = require('fs')
// 2. 调用 fs.writeFile() 方法,写入文件的内容
//    参数1:表示文件的存放路径
//    参数2:表示要写入的内容
//    参数3:回调函数
fs.writeFile('./2.txt', 'ok123', function(err) {
    // 2.1 如果文件写入成功,则 err 的值等于 null
    // 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
    // console.log(err)

    if (err) {
        return console.log('文件写入失败!'   err.message)
    }
    console.log('文件写入成功!')
})

  • fs.writeFile() 方法只能用来创建文件,不能用来创建路径
  • 重复调用 fs.writeFile() 写入同一个文件,新写入的内容会覆盖之前的旧内容

# path 路径模块

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

导入使用:

代码语言:javascript复制
const path = require('path')

# path.join()

用来将多个路径片段拼接成一个完整的路径字符串

语法:

代码语言:javascript复制
path.join([...paths]) 

例子:

代码语言:javascript复制
const path = require('path')
const fs = require('fs')

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

// fs.readFile(__dirname   '/files/1.txt')

fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function(err, dataStr) {
  if (err) {
    return console.log(err.message)
  }
  console.log(dataStr)
})

# path.basename()

用来从路径字符串中,将文件名解析出来

语法:

代码语言:javascript复制
path.basename(path,ext) 
  • path: 必选参数,表示一个路径的字符串
  • ext: 可选参数,表示文件扩展名
  • 返回: 表示路径中的最后一部

例子:

代码语言:javascript复制
const path = require('path')

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

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

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

# path.extname()

获取路径中的扩展名部分

例子:

代码语言:javascript复制
const path = require('path')

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

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

时钟案例

代码语言:javascript复制
// 1.1 导入 fs 模块
const fs = require('fs')
// 1.2 导入 path 模块
const path = require('path')

// 1.3 定义正则表达式,分别匹配 <style></style> 和 <script></script> 标签
const regStyle = /<style>[sS]*</style>/
const regScript = /<script>[sS]*</script>/

// 2.1 调用 fs.readFile() 方法读取文件
fs.readFile(path.join(__dirname, '../素材/index.html'), 'utf8', function(err, dataStr) {
  // 2.2 读取 HTML 文件失败
  if (err) return console.log('读取HTML文件失败!'   err.message)
  // 2.3 读取文件成功后,调用对应的三个方法,分别拆解出 css, js, html 文件
  resolveCSS(dataStr)
  resolveJS(dataStr)
  resolveHTML(dataStr)
})

// 3.1 定义处理 css 样式的方法
function resolveCSS(htmlStr) {
  // 3.2 使用正则提取需要的内容
  const r1 = regStyle.exec(htmlStr)
  // 3.3 将提取出来的样式字符串,进行字符串的 replace 替换操作
  const newCSS = r1[0].replace('<style>', '').replace('</style>', '')
  // 3.4 调用 fs.writeFile() 方法,将提取的样式,写入到 clock 目录中 index.css 的文件里面
  fs.writeFile(path.join(__dirname, './clock/index.css'), newCSS, function(err) {
    if (err) return console.log('写入 CSS 样式失败!'   err.message)
    console.log('写入样式文件成功!')
  })
}

// 4.1 定义处理 js 脚本的方法
function resolveJS(htmlStr) {
  // 4.2 通过正则,提取对应的 <script></script> 标签内容
  const r2 = regScript.exec(htmlStr)
  // 4.3 将提取出来的内容,做进一步的处理
  const newJS = r2[0].replace('<script>', '').replace('</script>', '')
  // 4.4 将处理的结果,写入到 clock 目录中的 index.js 文件里面
  fs.writeFile(path.join(__dirname, './clock/index.js'), newJS, function(err) {
    if (err) return console.log('写入 JavaScript 脚本失败!'   err.message)
    console.log('写入 JS 脚本成功!')
  })
}

// 5.1 定义处理 HTML 结构的方法
function resolveHTML(htmlStr) {
  // 5.2 将字符串调用 replace 方法,把内嵌的 style 和 script 标签,替换为外联的 link 和 script 标签
  const newHTML = htmlStr.replace(regStyle, '<link rel="stylesheet" href="./index.css" />').replace(regScript, '<script src="./index.js"></script>')
  // 5.3 写入 index.html 这个文件
  fs.writeFile(path.join(__dirname, './clock/index.html'), newHTML, function(err) {
    if (err) return console.log('写入 HTML 文件失败!'   err.message)
    console.log('写入 HTML 页面成功!')
  })
}

# http模块(核心)

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

导入使用:

代码语言:javascript复制
const http = require('http')

# http.createServer()

调用 http.createServer() 方法,即可快速创建一个 web 服务器实例

用法步骤:

代码语言:javascript复制
// 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')
})

用法实例:

① 获取请求的 url 地址 ② 设置默认的响应内容为 404 Not found ③ 判断用户请求的是否为 / 或 /index.html 首页 ④ 判断用户请求的是否为 /about.html 关于页面 ⑤ 设置 Content-Type 响应头,防止中文乱码 ⑥ 使用 res.end() 把内容响应给客户端

代码语言:javascript复制
const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
  // 1. 获取请求的 url 地址
  const url = req.url
  // 2. 设置默认的响应内容为 404 Not found
  let content = '<h1>404 Not found!</h1>'
  // 3. 判断用户请求的是否为 / 或 /index.html 首页
  // 4. 判断用户请求的是否为 /about.html 关于页面
  if (url === '/' || url === '/index.html') {
    content = '<h1>首页</h1>'
  } else if (url === '/about.html') {
    content = '<h1>关于页面</h1>'
  }
  // 5. 设置 Content-Type 响应头,防止中文乱码
  res.setHeader('Content-Type', 'text/html; charset=utf-8')
  // 6. 使用 res.end() 把内容响应给客户端
  res.end(content)
})

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

0 人点赞