一、Node.js
1、是一个基于 Chrome V8 JavaScript 引擎构建的 JavaScript 运行时环境。简单来说,Node.js 让 JavaScript 可以在服务器端运行,而不仅仅局限于浏览器中。
2、js可以基于Node.js 写后端逻辑
二、安装Node.js
1、安装教程:https://www.runoob.com/nodejs/nodejs-install-setup.html
2、安装成功使用node -v校验是否成功
三、Node.js的使用
1、在node.js环境中执行js代码
在对应的js文件中打开终端,运行node js文件名
四、fs(读、写文件)
1、是 Node.js 里的一个内置模块,全称是File System,意思是文件系统
2、它的作用是:用 JavaScript 操作文件和文件夹
读取文件
写入文件
创建文件
删除文件
创建文件夹
判断文件是否存在
3、使用方式:const fs = require('fs');
(1)读取文件
const fs = require('fs'); fs.readFile('./test.txt', 'utf8', function (err, data) { if (err) { console.log('读取文件失败'); console.log(err); return; } console.log('读取文件成功'); console.log(data); });(2)写入文件
const fs = require('fs'); fs.writeFile('./test.txt', '你好 Node.js', 'utf8', function (err) { if (err) { console.log('写入文件失败'); console.log(err); return; } console.log('写入文件成功'); });(3)__dirname是 Node.js 里的一个特殊变量表示:当前文件所在的文件夹的绝对路径
path.join相当于+
const fs = require('fs'); const path = require('path'); const filePath = path.join(__dirname, 'test.txt'); fs.readFile(filePath, 'utf8', function (err, data) { if (err) { console.log('读取失败'); console.log(err); return; } console.log(data); });五、http
1、是 Node.js 里的一个内置模块,用来创建HTTP 服务。
2、服务器代码
const http = require('http'); const server = http.createServer(function (req, res) { console.log('请求地址:', req.url); console.log('请求方式:', req.method); res.setHeader('Content-Type', 'text/html; charset=utf-8');//防止中文乱码 res.end('请求成功');//将内容响应给客户端 }); server.listen(3000, function () { console.log('服务器启动成功:http://localhost:3000'); });3、根据不同的url返回不同的html内容
const http = require('http'); const server = http.createServer((req, res) => { res.setHeader('Content-Type', 'text/html; charset=utf-8'); if (req.url === '/') { res.end('首页'); } else if (req.url === '/login') { res.end('登录页'); } else { res.end('404'); } }); server.listen(3000, () => { console.log('服务器启动成功:http://localhost:3000'); });六、模块化(Nodejs遵循了CommonJS模块化规范)
CommonJS规定了模块的特性和各模块之间如何相互依赖。
1、把代码拆成多个文件,用的时候再引入。
2、Node.js 模块主要分为3 类:
(1) 内置模块
Node.js 自带的模块,不需要安装,直接require使用。
const fs = require('fs');
const path = require('path');
const http = require('http');
(2)自定义模块
自己写的 JS 文件,然后用require引入。
(3)第三方模块(包)
https://www.npmjs.com/
别人写好的模块,需要先用npm安装,再使用。
常见第三方模块:
express Web服务器框架
mysql 操作 MySQL 数据库
axios 发送请求
dayjs 处理时间
比如安装express npm install express
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('首页'); }); app.listen(3000, () => { console.log('服务器启动成功'); });3、module是 Node.js 里每个 JS 文件自带的一个对象。
(1)module 表示当前这个模块,也就是当前这个 JS 文件
(2)console.log(module);
4、Node.js 模块化作用域
(1)每一个 JS 文件,都是一个独立的模块。模块里面的变量、函数,默认只能在当前文件里使用。
(2)想给别的文件用,必须导出
//test.js文件 const name = '张三'; function sayHello() { console.log('你好'); } //导出给别的文件使用 module.exports = { name, sayHello, }; //index.js文件 const obj = require('./test');//引入test.js文件 console.log(obj.name); obj.sayHello();(3)module.exports等同于exports(同一个文件同一用法,尽量不要同时用)
(无论用module.exports还是exports),require()模块的时候,得到的是module.exports指向的对象
5、Node.js 项目里初次装包,一般会多出这几个东西:
(1)node_modules 真正安装的包
package.json 项目说明书,记录你用了哪些包——npm init -y生成 package.json文件
package-lock.json 锁定包版本,保证大家安装一致
(2)npm i会自动安装最新的包,可通过@指定具体版本——npm i dayjs@1.11.10
npm i -g 全局包
(3)装包后,它里面会多一个dependencies,记录安装了哪些包
核心依赖包dependencies:开发阶段与上线都要用到的包安装到dependencies(默认)
开发依赖包devDependencies:只在开发阶段用的包安装到devDependencies——npm i 包名 --save-dev(缩写:npm i 包名 -D)
(4)npm uninstall卸载包
(5)包下载慢,默认国外的镜像,要切换到国内淘宝镜像
nrm切换下包镜像源
(6)i5ting_toc 是一个可以把Markdown 文件转换成 HTML 页面的 npm 工具
它常用于把.md笔记生成一个带目录的网页
npm i i5ting_toc -g //下载包
i5ting_toc -f 文件名.md //转换
(7)模块的加载机制
Node.js 模块加载顺序:
1. 内置模块:直接加载
2. 自定义模块:用 ./ 或 ../ 找文件
3. 第三方模块:去 node_modules 找
4. 加载过的模块会缓存,不会重复执行
自定义模块加载:
先文件
后目录
文件:
.js
.json
.node
目录:
package.json -> main
找不到再找:
index.js
index.json
index.node