1.Node.js是什么
官方概念:Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时
- 上面的概念中有两个特殊的名词,解释如下
- chrome V8引擎: chrome浏览器用来解析和执行js代码的工具
- 运行时:理解为一个容器,用来运行代码的环境;
- 所以,对Node.js更通俗的解释是:一个用chrome浏览器V8引擎来跑js代码的环境
2.Nodejs的理解
- Node全名是Node.js(也叫Node, nodejs, node.js),但它不是一个js文件,而是一个软件
- Node.js是一个基于Chrome V8引擎的javascript的运行环境,在这个环境中可以执行js代码
- Node.js提供了大量的内置模块及丰富的第三方模块,能够让我们完成文件读写、Web服务器、操作数据库等功能
3.Node环境下运行js代码
let a = 1;
console.info(a + 2);
/*打开终端输入命令 node 要执行的文件的路径
注意:node的后面要有一个空格*/
//终端命令执行示例
node index.js
node 01.js // 01.js就是当前目录下
node a/01.js // 01.js在目录a下面的文件名
//node.js就是一个运行环境,可以跑js代码
4.常用cmd终端命令总结
node 空格 某个js文件 调用 node 程序,运行某个js文件
clear 或者 cls 清空界面
ls/dir 查看列表(list)
cd 目录名 进入到目录中去
cd .. 返回上一级目录
cd \ 直接回到根目录
Ctrl+C 停止 Node 程序
输入部分文件名后按下 Tab 键 补全文件名 或 目录名, 多次tab会进行切换
↑ ↓ 上下箭头 切换历史输入
5.Node.js和浏览器端的区别
1.在浏览器端
js由三部分组成:ECMAScript + BOM + DOM
2.在nodejs端
有ECMAScript + 内置模块(fs, http, path,.....)。在nodejs中是没有BOM、DOM、window,但使用ECMAScript是通用的
- 相同点:
- 都是可以运行js代码的容器,更严格一点说:都可以运行ECMAScript
- 要下载按照才能使用
- 不同点:
-
各有不同的API:nodejs运行js时,不能写DOM,BOM , 也不能使用window对象
-
Node.js环境可以实现后端的功能
-
浏览器环境可以去实现前端的功能
-
浏览器环境可以去实现前端的功能
6.nodejs中的模块分类
每个模块都是一个独立的文件。每个模块都可以完成特定的功能,我们需要时就去引入它们,并调用。
- 核心模块
- 就是nodejs自带的模块,在安装完nodejs之后,就可以任意使用
- 相当于学习js时使用的Array对象
- 源代码 <https://github.com/nodejs/node/tree/master/lib>
2. 自定义模块 - 程序员自己写的模块 相当于我们在学习js时的自定义函数。 3. 第三方模块 其他程序员写好的模块。
7.核心模块
- 核心模块就是Node内置的模块,需要通过唯一的标示名称来进行获取
- 每一个核心模块基本上都是暴露了一个对象,里面包含一些方法供我们使用
- 一般在加载核心模块的时候,变量(或常量)的起名最好就和核心模块的标识名同名
- 例如:const fs = require('fs')
,
const path = require('path')
8. fs-readFileSync-文件读取
//1.引入fs模块
const fs = require("fs")
//2.调用api
let rs = fs.readFileSync('文件路径',"utf8")
// rs 就是读出来的内容
console.log(rs)
//注意:api的名字结尾有Sync (async是异步的, sync表示同步的)
捕获同步格式中的错误对象
//如果读成功,则会获取读出来的数据,如果失败了,则会中断后续所有的代码执行
//1.引入fs
const fs = require('fs')
//2.调用api
let rs = fs.readFileSync('./01.jsxxxxxx', 'utf8')//没有01.jsxxxxx这个文件
console.log(rs);
console.log(1); //这样报错后面的代码不会继续执行
//终端会报错显示 会报错:Error: ENOENT: no such file or directory, open './01.jsxxxxxx'
//意思为:错误:ENOENT:没有这样的文件或目录,打开”。/ 01. jsxxxxxx”
解决方案:用try. catch 结构
try {
// 可能会有错误的代码
const fs = require('fs')
let rs = fs.readFileSync('./01.jsxxxxxx', 'utf8')
console.log(rs);
} catch (err) {
// 如果try内的代码有错误,就会进入catch,并把错误传进来
console.log('有错误发生');
console.log(err);
}
//这样写终端会显示有错误发生,然后会继续执行后面的代码
console.log(1)
9. fs-writeFileSync-文件写入
- 功能:向指定文件中写入字符串,如果没有该文件则尝试创建该文件
- 注意:它是覆盖写入,会把文件中的内容全部删除,再填入新的内容
fs.writeFileSync(pathName, content, option);
// 参数1: 要写入的文件路径 --- 相对路径和绝对路径均可,推荐使用绝对路径
// 参数2: 要写入文件的内容
// 参数3: 配置项,设置写入的字符集,默认utf-8
写入JSON数据
const fs = require('fs')
const data = [{name: '小王', age: 20}]
fs.writeFileSync('./a.txt', data)
//这样写会报错:data不是一个字符串或者是Buffer
解决方法 JSON.stringify(常量名)将里面的内容转换为字符串
const fs = require('fs')
const data = [{name: '小王', age: 20}]
fs.writeFileSync('./a.txt', JSON.stringify(data))
10. 路径问题-使用绝对路径
- 绝对路径: 从磁盘根目录开始到指定文件的路径。
- 相对路径:是以某个文件的位置为起点,相对于这个位置来找另一个文件。
nodejs中提供了两个全局变量来获取绝对路径
- __filename:获取当前被执行的文件的绝对路径
- __dirname:获取当前被执行的文件的文件夹所处的绝对路径
全局变量的含义是
- 变量:它们的值是变化的。在不同的文件中值就不同,因为文件的路径也不同嘛。
- 全局:在任意地方都可以直接使用。
11. path模块
- 作用是用来处理路径问题:拼接,分析,取后缀名等等 常用的api
- path.basename() :此方法返回
path
的最后一部分。一般可用来获取路径中的文件名。 - path.join() :路径拼接。
- path.parse(pathurl) :把一个路径转成一个对象 注意:path模块并不考虑其中地址是否真的存在,只是单纯调用方法,获取结果。
12. 小结
- nodejs 是什么?
a.是一个基于chrome v8引擎的javascript 运行时
b,它是不是一个新语言,它只是一个环境,用来运行js代码
2. 与浏览器的区别在?
a,nodejs中没有dom,bom, window, 只有 ECMAScript
3. 我们学它是图什么?
a,它是用来写后端功能,帮助我们了解后端程序员是如何工作;
b,提升竞争力,会后端优先!
c,后边学习前端框架的基础
4. 学什么?
a,模块系统(核心模块 fs, path,自定义模块,第三方模块)
b,npm 操作
5. fs: 用来做文件(文件夹)操作:读\写\删除\创建.......
-
path: 做路径相关的操作 path.join()
-
dirname, filename : 在nodejs中,表示全局变量。用来获取绝对路径。
a,__dirname : 获取当前被执行的文件所在的文件夹的绝对路径
b,__filename: 获取当前被执行的文件的绝对路径