• Nodejs-1


    什么是Node.js

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境。
    Node.js是JavaScript的后端运行环境,因此Node.js中是无法调用DOM和BOM等浏览器内置API。
    Node.js官网

    安装

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    证明安装成功:
    打开cmd(终端),输入:

    node -v
    在这里插入图片描述

    常见终端命令

    执行命令 例如: node test.js
    node 要执行的js文件的路径
    终端中的快捷键
    tab键,能够快速补全路径
    esc键,能够快速清空当前输入的命令
    输入cls命令,清空终端

    fs文件系统模块

    fs模块是Node.js官方提供的,用来操作文件的模块。
    readFile(path [, options ], callback)
    在这里插入图片描述
    运行

    node 1.js

    writeFile(path, data[, options], callback)

    注意:
    在使用fs模块操作文件时,如果提供的操作路径是./或者…/开头的相对路径,很容易出现路径动态拼接错误的问题。
    原因:代码在运行时候,会以执行node命令时所在的目录,动态拼接出被操作文件的完整路径。
    解决方法:绝对路径
    __dirname 表示当前文件所处的目录

    // 导入fs模块
    const fs = require("fs");
    fs.writeFile(__dirname + "/2.txt", "写入的内容111", (err) => {
      if (err) {
        console.log("写入错误" + err);
      }
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    path路径模块

    path模块是Node.js官方提供的、用来处理路径的模块。例如:
    path.join() 用来拼接多个路径片段
    path.basename() 用来从路径字符中,将文件名解析出来。

    // 导入fs模块
    const fs = require("fs");
    const path = require("path");
    fs.writeFile(path.join(__dirname, "/2.txt"), "写入的内容111111", (err) => {
      if (err) {
        console.log("写入错误" + err);
      }
    });
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    http模块

    http模块是Node.js官方提供的、用来创建web服务器的模块。

    // 1.导入http模块
    const http = require("http");
    // 2.创建web服务器实例
    const server = http.createServer();
    // 3.为服务器实例绑定request事件,监听客户端的请求
    /*
    req: 请求对象,包含与客户端相关的属性和数据。例如:
    req.url 是客户端请求的url地址
    req.method 是客户端的Method请求类型
    res: 响应对象,包含与服务器相关的属性和数据
    res.end() 想客户端发送指定的内容,并结束此次请求的处理过程
    */
    server.on("request", function (req, res) {
      // 获取url地址
      const url = req.url;
      let content = "

    404

    "
    ; if (url === "/") { content = "

    首页

    "
    ; } else if (url === "/about.html") { content = "

    关于

    "
    ; } // 为防止中文显示乱码的问题,需要设置响应头 Content-Type res.setHeader("Content-Type", "text/html; charset=utf-8"); res.end(content); }); // 4.启动服务器 server.listen(8080, () => { console.log("server is running at http://127.0.0.1:8080"); });
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    模块化

    Node.js中根据模块来源的不同,将模块分为了3大类,分别是:

    • 内置模块(有Node.js官方提供的,例如fs、path)
    • 自定义模块(用户创建的每个.js文件)
    • 第三方模块

    module对象

    每个.js自定义模块中都有一个module对象,它里面存储了和当前模块有关的信息。例如:
    在这里插入图片描述
    外界用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。

    Node.js中的模块化规范

    node.js遵循了CommonJS模块化规范,CommonJS规定了模块的特性和各模块之间如何相互依赖。
    CommonJS规定:

    • 每个模块内部,module变量代表当前模块
    • module变量是一个对象,它的exports属性是对外的接口
    • 加载某个模块,其实就是加载改模块的module.exports属性。require()

    npm与包

    什么是包?
    Node.js中第三方模块又叫做包。npmjs
    初次装包完成后,在项目文件夹下多一个node_modules的文件夹和package-lock.json的配置文件。
    其中:
    node_modules文件夹用来存放所有安装到项目中的包。require()导入第三方包时,就是从这个目录中查找并加载包。
    package.json配置文件用来记录node_modules目录下的每一个包的下载信息。例如包的名字、版本号、下载地址等。

    • 安装包的命令,可以用@指定版本
      npm install 包的名字@2.22.2
    • 快速创建package.json文件
      npm init -y
    • npm install命令,npm包管理工具会先读取package.json中的dependencies节点,然后一次性下载所有记录的包
    • npm uninstall 包名
      用来卸载已经安装的包

    package.json配置文件说明

    {
      "name": "nodejs",
      "version": "1.0.0",
      "description": "",
      "main": "1.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "moment": "^2.29.4"
      },
      "devDependencies": {
        "eslint": "^8.25.0"
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • dependencies节点,用来记录npm install命令安装了那些包
    • devDependencies节点。如果某些包只在开发阶段会用到,在项目上线后不会用到,则建议把这些包记录到devDependencies节点中。与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中。

      // 安装指定的包,并记录到devDependencies节点中
      npm i 包名 -D
      // 注意:上述命令是简写模式,等价于下面完整的写法:
      npm install 包名 --save-dev

    解决下包速度慢的问题

    在使用npm下包的时候,默认是从国外的 https://registry.npmjs.org服务器进行下载。
    方法:切换到国内的包镜像源

    查看当前的下包镜像源

    npm config get registry

    将下包的镜像源切换为淘宝镜像源

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

    为了更方便的切换下包的镜像源,我们可以安装nrm这个小工具,利用nrm提供的终端命令,可以快速查看和切换下包的镜像源。

    通过npm 包管理器,将nrm安装为全局可用的工具

    npm i nrm -g

    查看可用的镜像源

    nrm ls

    将下载的镜像源切换为taobao镜像

    nrm use taobao

    在这里插入图片描述

    模块的加载机制

    • 模块在第一次加载后会被缓存。这也意味着多次调用require()不会导致模块代码被执行多次。
    • 内置模块的加载优先级最高
    • 使用require()加载自定义模块时,必须指定以./或…/开头的路径标识符。在加载自定义模块时,如果没有指定上述路径标识符,则node会把它当作内置模块或者第三方模块进行加载。
    • 目录作为模块
      当把目录作为模块标识符,传递给require()进行加载的时候,有三种加载方式:
      1. 在被加载的目录下查找一个叫做package.json文件,并寻找main属性,作为require()加载的入口
      2. 如果目录里没有package.json文件,或者main入口不存在或无法解析,则Node.js将会试图加载目录下的index.js文件
      3. 如果上述都失败了,则报错。cannot find module xxx
  • 相关阅读:
    【知识管理】总纲
    helm部署etcd集群
    Java项目:ssm课程在线学习与测试系统
    如何应对访问国外服务器缓慢的问题?SDWAN组网是性价比之选
    深度学习系列34:统一图像视频文字的女娲模型
    iap2中文翻译
    Frida系列--Stalker原理分析
    Java学习笔记1—JVM虚拟机—1.3参数调优
    【python进阶】装饰器
    基于JAVA水星家纺网站计算机毕业设计源码+数据库+lw文档+系统+部署
  • 原文地址:https://blog.csdn.net/weixin_43484007/article/details/127397807