Node.js基本介绍

130 阅读3分钟

Node.js定义

是一个基于chrome v8引擎的JavaScript运行时环境

与浏览器区别

Node.js没有DOM,BOM,window对象

学习大纲

  • 内置模块
  • 自定义模块
  • 第三方模块
  • npm工具安装,写在第三方包
  • 为vue等框架打下基础

require导入模块

  • const 变量(一般与模块名统一)=require('核心模块名')

  • 例如:导入fs和Path核心模块

    const fs = require('fs')
    

    读取文件

    异步读取

    • 读取成功,error值为null,并且有data
    • 读取失败,有error值,data值为undefined
    const fs = require("fs");
    fs.readFile("./05-hello.txt", (err, data) => {
      if (err) return console.log("读取文件失败");
      console.log("读取到文件内容:", data.toString());
    });
    

    同步读取

    • 读取时直接返回数据
    const fs = require("fs");
    const data1 = fs.readFileSync("./05-hello.txt");
    const data = fs.readFileSync("./bg.png");
    console.log("text", data1.toString());
    console.log("图片", data);
    

    捕获

    const fs = require("fs");
    try {
      const data = fs.readFileSync("./055-hello.txt");
      console.log(data.toString());
    } catch (error) {
        console.log("读取失败");
    }
    
    

写入内容

异步写入内容(常用)

  • fs.writeFile(path,data[,option],callback)
  • 覆盖式写入,后面的内容会将前面的内容覆盖
  • 参数:(被写入路径,写入内容(字符串格式),文件参数配置默认utf8,完毕回调函数)
  • 没有对应的文件时,程序会尝试创建文件
const fs = require("fs");
fs.writeFile("./05-hello.txt", "hello 我来了 我要异步覆盖你", (err, data) => {
  if (err) return console.log("写入失败");
  console.log("写入成功");
});

数组转换字符串写入

const fs = require("fs");
const arr = [{ id: 1 }];
fs.writeFile("./05-hello.txt", JSON.stringify(arr), (error) => {
  if (error) return console.log("写入失败");
  console.log("写入成功");
});
  • 读取json数据文件,转换格式添加写入新数据

    // 1.导入模块
    const fs = require("fs");
    // 2.难道前端传来的数据
    const obj = { name: "刘备" };
    // 3.读取文件
    fs.readFile("./13-data.json", (err, data) => {
      // 4.判断是否失败
      if (err) return console.log("读取失败");
      console.log("读取成功");
      // 5.将成功读取的buffer数据格式转成对象格式
      const arr = JSON.parse(data.toString());
      // 6.将前端给的数据新加进数组
      arr.push(obj);
      // 7.开始写入文件
      fs.writeFile("./13-data.json", JSON.stringify(arr), (err) => {
        //   8.判断是否写入失败
        if (err) return console.log("写入失败");
        console.log("写入成功");
      });
    });
    

    同步写入内容(不常用)

    • 提示用户错误还要套多一层trycatch语法,增加代码量(不推荐)
const fs = require("fs");
try {
  fs.writeFileSync("./05-hello.txt", "I am boy");
  console.log("写入成功");
} catch (error) {
  console.log("写入错误");
}

HTTP模块

基础语法

// 1.带入http模块
const http = require("http");
// 2.声明变量存放创建的服务
const server = http.createServer((req, res) => {
  console.log("接收到了客户端请求");
  res.end("response is already");
});
// 3.监听端口号并启动web服务器等待客户端发起请求,接着打开浏览器客户端发起端口请求
server.listen(8080, () => {
  console.log("web服务器准备就绪:127.0.0.1:8080可以访问");
});


第三方

模块化

  • 导出

    • 每个js文件看作是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容
  • 导入

  • 作用

    • 能够对一类功能做分类管理
    • 能够保护成员不被污染
    • 不用考虑导入顺序
    • 按需导入,可以随时更换模块,维护方便

express

  • 作用

  • 使用更方便

  • 在文件夹中打开cmd

    npm init
    
  • 输入上述命令后,提示输入项目名字(英文小写),输入后一直回车,生成package.json

    npm install express
    
  • 等待安装express完成

  • 配置淘宝镜像地址可以提升速度

    npm config set registry https://registry.npm.taobao.org
    

npm

  • 通过npm可以下载所需要的资源,例如express, flexible, echarts, bootStrap……

  • 通常情况执行npm init回车,后续会有好几行要按回车

    • 省略要按回车的写法(前提是只做本地项目,并且根目录名字没有特殊符号或中文)

      npm init -y
      
  • 不小心把依赖包删除的时候,package.json文件会记录本项目所用到的包名和版本,执行命令可以把所记录的依赖包下载回来

    npm i
    
  • 全局装包

    npm i 包名 -g
    
  • 卸载包

    npm un dayjs
    
    npm un dayjs -g
    

dayjs

  • 更方便的输出格式化时间

    // 导包
    const dayjs = require("dayjs");
    // 输出格式化时间
    console.log(dayjs().format("YY/MM/DD hh:mm:ss"));
    

拓展

  • 数组filter()

    • 符合条件的内容返回新数组

      const newArr = arr.filter((value) => value === num);
      
    • 找到数组中符合条件的目标并返回

      const stu = arr.find(item => item.id === Number(req.body.id))