node.js

144 阅读4分钟

node

1. fs模块

1.1 文件读取

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

  • path 读取的文件路径
  • options 可选的参数,默认为null,其实得到的是 buff
  • callback 回调函数
    • err 错误对象
    • data 读取的数据
const fs = require('fs')

fs.readFile('./files/1.txt', 'utf8', (err, data) => {
  if (err) return console.log(err.message)
  // console.log(data.toString())
  // console.log(data + '')
  console.log(data)
})

1.2 文件写入和追加

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

  • file 写入文件路径
  • data 写入的数据
  • options 可选的参数,默认为utf8
  • callback 回调函数
    • err 错误对象
const fs = require('fs')

// fs.writeFile('./files/1.txt', '复方草珊瑚', 'utf8', (err) => {
//   if (err) return console.log(err.message)
//   console.log('success')
// })

fs.appendFile('./files/1.txt', '复方草珊瑚', 'utf8', (err) => {
  if (err) return console.log(err.message)
  console.log('success')
})

1.3 文件拷贝

fs.copyFile(src, dest[, mode], callback)

  • src 拷贝的文件路径
  • src 拷贝后的文件路径
  • mode 可选参数
  • callback
    • err 错误对象
const fs = require('fs')
// 传统写法
// fs.readFile('./files/1.txt', 'utf8', (err, data) => {
//   if (err) return console.log(err.message)
//   // console.log(data)
//   fs.writeFile('./files/1-copy.txt', data, err => {
//     if (err) return console.log(err.message)
//     console.log('success')
//   })
// })

// 新版的写法 node必须是 8.5.0+
fs.copyFile('./files/1.txt', './files/1-copy.txt', err => {
  if (err) return console.log(err.message)
  console.log('success')
})

2. path 模块

path.join(__dirname,'./file/1.txt')

3. 模块化

什么是模块化

每一个js文件就是一个一个模块,在一个js文件中引入另一个js文件就是模块化

模块化的方案 (了解)

  1. 前端方案
  • AMD require.js

  • CMD sea.js

  1. 后端处理方案
  • commonjs
  1. es的模块化

commonjs的规范 (掌握)

  • global 一般用于定义一些全局的属性,但是多次定义重复的数据会被覆盖

  • 暴露 exports module.exports

  • 引入 require

  • 标识符 module

  • commonjs 中module.exports 和 exports 的区别

    • module.exports.a === exports.a

    • module.exports = {b:2} exports.a=1

      以module.exports 为准不再设置 a 的值,所有建议以后大家暴露的时候使用 module.exports

4. 面试七连击 核心

  1. 什么是回调函数

在一个函数中当另一个函数当做参数使用,调用的同时可以传递内容的数据

所谓的回调函数就是参数的调用

  1. 回调函数的使用场景

需要延迟获取结果值的时候

  1. 回调函数有什么缺陷

多层嵌套的时候产生回调地狱

  1. 如果解决回调函数的缺陷

es6的Promise

  1. Promise的特性

Promise 是一个构造函数,也是一个对象

Promise 的原型上有一个then函数 resolve reject

  1. Promise有什么缺点
  • promise一旦新建就会立即执行,无法中途取消
  • 当处于pending状态时,无法得知当前处于哪一个状态,是刚刚开始还是刚刚结束
  • 如果不设置回调函数,promise内部的错误就无法反映到外部
  • promise封装ajax时,由于promise是异步任务,发送请求的三步会被延后到整个脚本同步代码执行完,并且将响应回调函数延迟到现有队列的最后,如果大量使用会大大降低了请求效率。
  1. 如何解决Promise的缺点
const fs = require('fs')
const path = require('path')
function getFileData(url) {
  return new Promise((res, rej) => {
    fs.readFile(path.join(__dirname, url), 'utf8', (err, data) => {
      if (err) return rej(err)
      res(data)
    })
  })
}


async function getData() {
  const data1 = await getFileData('../txt/1.txt')
  const data2 = await getFileData('../txt/2.txt')
  const data3 = await getFileData('../txt/3.txt')
  console.log(data1,data2,data3);
}
getData()

5. 包管理工具

npm

  1. 设置淘宝镜像

  # 方式1 直接配置
  npm config set registry https://registry.npm.taobao.org

  # 方式2 使用nrm管理镜像  
  npm i nrm -g 

  nrm --version 

  nrm ls | list 

  nrm use taobao 
  1. 查看镜像
  npm config get registry  
  1. 常用命令

  npm i 包的名称 -g|--save(-S)|--save-dev(-D)

  npm uninstall 包的名称 -g|--save(-S)|--save-dev(-D)

  npm init -y 生成package.json

  npm i  根据package.json 记录的包重新下载

cnpm

  npm install -g cnpm --registry=https://registry.npm.taobao.org

yarn

  1. 安装yarn

  npm i yarn -g  

  1. 常用命令

  yarn --version

  yarn add 包的名称 -g|--save(-S)|--save-dev(-D)

  yarn remove 包的名称 -g|--save(-S)|--save-dev(-D)

  yarn init -y 生成package.json

  yarn  根据package.json 记录的包重新下载

node-sass 包单独配置镜像

  npm config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g
  yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g

6. 包

包一些模块整合在一起, 还有一些依赖的资源

包的规范

  • package.json

    • name 包的名称
    • version 包的版本
    • main 入口文件路径
  • dest | dist 给外部提供的资源

  • src | lib 存放源码

  • test 测试文件

  • readme.md 包的说明文档

包的使用

系统模块包

const fs = require('fs)

自定义包

const calc = require('./calc')

第三方包

const jquery = require('jquery')

包的调用规则

自定义包 --> 相对路径 --> package.json --> main --> src/index.js --> ...

第三方包 --> node_modules --> 包名称 --> package.json --> main --> src/index.js --> ...

快捷删包

npm i rimraf -g

rimraf node_modules