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);
  }
});

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);
  }
});

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 = "<h1>404</h1>";
  if (url === "/") {
    content = "<h1>首页</h1>";
  } else if (url === "/about.html") {
    content = "<h1>关于</h1>";
  }
  // 为防止中文显示乱码的问题,需要设置响应头 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");
});

模块化

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"
  }
}

  • 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值