Node.js(了解):fs、path模块、url端口号、模块化、包、npm

1、基础认识

前端工程化:开发项目直到上线,过程中集成的所有工具和技术。

2、fs模块 - 读写文件

模块:类似插件,封装了方法/属性

fs模块:封装了与本机文件系统进行交互的方法/属性

语法:1. 加载fs模块对象        2. 写入文件内容        3. 读取文件内容

写入过程中有错误,err参数就有值,否则,err参数就为空

const fs = require('fs')
fs.writeFile('./text.txt', 'Hello,Node.js', (err) => {
  if (err) console.log(err)
  else console.log('写入成功')
})
fs.readFile('./text.txt', (err, data) => {
  if (err) console.log(err)
  // data 是 buffer 16进制数据流对象
  // .toString() 转换为字符串
  else console.log(data.toString())
})

3、path模块 - 路径处理

建议:在Node.js代码中,使用绝对路径

补充:__dirname(注意:前面是两个下划线)内置变量(获取当前模块目录 - 绝对路径)

注意:Windows:路径是\        Mac:路径是/

注意:path.join()会使用特定于平台的分隔符,作为界定符,将所有给定的路径片段连接在一起。

语法:加载path模块、使用path.joinn()方法,拼接路径

案例(体验) - 压缩前端 html

步骤:读取源html文件内容、正则替换字符串、写入到新的html文件中

// 1.1 读取源 html 文件内容
const fs = require('fs')
const path = require('path')
// __dirname 获取当前文件所在文件夹的绝对地址
fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {
  if (err) console.log(err)
  else {
    const htmlStr = data.toString()
    // 1.2 正则替换字符串 g:全局替换
    const resultStr = htmlStr.replace(/[\r\n]/g, '')
    console.log(resultStr)
    // 1.3 写入到新的 html 文件中
    fs.writeFile(path.join(__dirname, 'dist/index.html'), resultStr, err => {
      if (err) console.log(err)
      else console.log('写入成功')
    })
  }
})

4、URL中的端口号

URL:统一资源定位符,简称网址,用于访问服务器里的资源。

端口号:标记服务器里不同功能的服务程序

端口号范围:0-65535之间的任意整数。

http模块 - 创建Web服务

        步骤:加载http模块,createServe 创建Web服务对象、监听request请求事件,设置响应头和响应体、配置端口号并启动Web服务、浏览器请求http://loaclhost:3000(loaclhost:固定代表本机的域名)

// 1.1 加载 http 模块,创建 Web 服务对象
const http = require('http')
// 1.2 创建Web服务对象
const server = http.createServer()
// 1.3 监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {
  // 设置响应头-text/plain:内容类型-普通文本以及中文编码格式
  res.setHeader('Content-Type', 'text/plain;charset=utf-8')
  // 设置响应体内容,结束本次请求与响应
  res.end('欢迎使用 Node.js 和 http 模块创建的 Web 服务')
})
// 1.4 配置端口号并启动 Web 服务 --- 区分访问哪个服务
server.listen(3000, () => {
  console.log('Web 服务启动成功了')
})
案例:浏览时钟

const fs = require('fs')
const path = require('path')
// 1. 基于 http 模块,创建 Web 服务
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
  // 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
  if (req.url === '/index.html') {
    fs.readFile(path.join(__dirname, 'dist/index.html'), (err, data) => {
      // 设置响应内容类型-html超文本字符串,让浏览器解析成标签网页等
      res.setHeader('Content-Type', 'text/html;charset=utf-8')
      res.end(data.toString())
    })
  } else {
    // 3. 其他路径,暂时返回不存在提示
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    res.end('你要访问的资源路径不存在')
  }
})
server.listen(8080, () => {
  console.log('Web 服务启动成功了')
})

5、Node.js 模块化

        在 Node.js 中,每个文件都被视为一个单独的模块。项目是由多个模块文件组成的。

        好处:提高代码复用性,按需加载,独立作用域。

        使用:需要标准语法导出和导入进行使用

CommonJS标准

const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

// 导出
module.exports = {
  url: baseURL,
  arraySum: getArraySum
}
const obj = require('./utils.js')
console.log(obj)
const result = obj.arraySum([5, 1, 2, 3])
console.log(result)
ECMAScript标准 - 默认导出和导入

utils.js:

const baseURL = 'http://hmajax.itheima.net'
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

// 默认导出
export default {
  url: baseURL,
  arraySum: getArraySum
}

index.js:

// 默认导入
import obj from './utils.js'
console.log(obj)
const result = obj.arraySum([10, 20, 30])
console.log(result)

package.json:

{
  "type": "module"
}
ECMAScript标准 - 命名导出和导入

命名导出和导入与默认导出和导入可以一起使用

utils.js:

export const baseURL = 'http://hmajax.itheima.net'
export const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

index.js:

// 命名导入
import {baseURL, getArraySum} from './utils.js'
console.log(obj)
console.log(baseURL)
console.log(getArraySum)
const result = getArraySum([10, 21, 33])
console.log(result)

6、包

案例:

arr.js

// 数组求和函数
const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)

module.exports = {
  getArraySum
}

str.js

/**
 * 目标:封装校验用户名和密码长度的函数
 * 要求:用户名最少 8 位,密码最少为 6 位
 */
const checkUserName = username => {
  return username.length >= 8
}

const checkPassWord = password => {
  return password.length >= 6
}

module.exports = {
  checkUser: checkUserName,
  checkPwd: checkPassWord
}

index.js

// 本文件是,utils 工具包的唯一出口
// 作用:把所有工具模块方法集中起来,统一向外暴露

const { getArraySum } = require('./lib/arr.js')
const { checkUser, checkPwd } = require('./lib/str.js')

// 统一导出所有函数
module.exports = {
  getArraySum,
  checkUser,
  checkPwd
}

server.js

// 导入 utils 软件包,使用里面封装的工具函数

const obj = require('./utils')
console.log(obj)
const result = obj.getArraySum([10, 20, 30])
console.log(result)

package.json

{
  "name": "cz_utils",
  "version": "1.0.0",
  "description": "一个数组和字符串常用工具方法的包",
  "main": "index.js",
  "author": "itheima",
  "license": "MIT"
}
npm - 软件包管理器

安装所有依赖

全局软件包 - nodemon

总结

常用命令

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值