一.Node.js是什么
node.js:是一个基于chrome v8引擎的JavaScript运行时(不是一个编程语言,是一个运行环境)
Chrome v8引擎:Chrome用来解析和执行代码的工具
运行时:是一个容器,是一个运行代码的环境
二.Node.js学习的意义和学习内容
学习意义:了解后端程序员的工作,增强竞争力;了解后端程序员如何工作
学习内容:
内置模块:能用不同的模块完成不同的功能,如创建web服务器,连接和操作数据库,写接口文档等
npm包:通过弄来管理我们需要的第三方包
三.下载安装Node.js
官网下载 LTS:长期支持版本(一般开发推荐使用) current:最新版
四.打开小黑窗的四种方式+在Node环境下运行js代码
四种打开方式: (1) 打开对应的文件,shift+鼠标右键:使用powershell打开)
(2)打开文件,上方路径输入cmd,也可以打开
(3)vscode打开,选中文件,右击在集成终端中打开
(4) window+R 打开输入 cmd
运行js代码: node 空格 文件路径
五.常用的命令按键
node 空格 执行文件的路径 ---- 运行文件
clear/cls ----清空界面
ls/dir -----显示当前文件夹下的内容
cd 目录名 -----进入指定目录中
cd .. -----返回上一级目录
cd \ -----直接回到根目录
Ctrl+c -----停止Node程序
输入部分文件后tab键 ------自动补全
上下箭头 ----调出历史命令
鼠标右键:复制,粘贴
六.Node和浏览器端的区别
相同点:都支持ECMAScript;有变量,函数,运算...
不同点:浏览器端:ECMAScript+Bom+Dom
Node.js:ECMAScript+内置模块(没有Bom,Dom,window对象)
七.nodejs中的模块分类
1.核心模块:nodejs自带的模块
nodejs自带的模块,在安装完以后,可以任意使用;
相当于js的Arrary对象
2.自定义模块:程序员自己写的
相当于我们js的自定义函数
3.第三方模块:别人写的
其他程序员写好的模块;
相当于别人写好的函数或者库
八.核心模块(fs模块)
1.基本概念
核心模块就是node的内置模块,通过唯一的标识名获取;
每一个核心模块暴露的基本是一个对象,里面包含一些方法可以供我们使用;
一般在加载核心模块的时候,变量(常量)的取名尽量和核心模块的标识名同名(例如:const fs=require('fs'))
2.文件读取 fs.readFilesync('文件路径','编码(可写可不写)')
//1.引入
const fs = require("fs");
//2.try{可能出错的代码} catch(err){catch中的err接收错误}
try {
//放入可能出错的代码
let rs = fs.readFileSync("01-node体验.js", "utf8");
console.log(rs);
} catch (err) {
//catch中的err接收错误
console.log(err);
}
3.文件写入txt文件 fs.writeFilesync('文件名','content')
//1.引用
const fs=require('fs')
//2.写入 fs.writeFileSync('文件名','内容')
//如果有文件(a.txt)存在,则是修改文件里面的内容,没有这个文件(a.txt)则是新增
fs.writeFileSync('a.txt','hello')
//文字内容换行 \n
fs.writeFileSync('a.txt','hello\n你好呀')
4.如何把json文件写入
const fs = require('fs')
const data = [{name: '小王', age: 20}]
fs.writeFileSync('./a.txt', data)
此时会报错,因为,data不是一个字符串或者Buffter
需要将data转成字符串,JSON.stringify(data),具体代码如下:
const fs = require('fs')
const data = [{name: '小王', age: 20}]
//data是字符串或者bufferl类型,不然会报错
//需要将data的转成字符串类型
fs.writeFileSync('./b.txt', JSON.stringify(data))
九.路径问题
1.相对路径的隐患
a.假如有一个文件夹'课堂练习代码',下面有一个js文件 05-node使用绝对路径.js,这个js文件下写入了一个test.txt文件
//1.引入
const fs=require('fs')
//2.写入文件
fs.writeFileSync('test.txt','你好,世界')
//3.读取文件
const rs=fs.readFileSync('test.txt','utf8')
console.log(rs);
如果是当前运行05 05-node使用绝对路径.js这个代码,路径没有问题,获取到文件内容(你好,世界)
b.假如跳出这个 05-node使用绝对路径.js,返回到上级目录'课堂练习代码',则会出现路径报错,显示路径错误
2.使用绝对路径(解决相对路径隐患)
node.js的两个全局变量:
__filename:获取当前被执行文件的绝对路径
__dirname: 获取当前被执行文件的文件夹的绝对路径
//1.引入
const fs=require('fs')
//2.写入文件
//fs.writeFileSync('test.txt','你好,世界')
//3.读取文件
// console.log(__dirname) 获取的是当前执行文件的绝对路径 //C:\Users\86159\Desktop\课堂练习代码
// console.log(__filename) 获取的是当前执行文件的文件夹的绝对路径 //C:\Users\86159\Desktop\课堂练习代码\05-node使用绝对路径.js
const path=__dirname+'/test.txt'
const rs=fs.readFileSync(path,'utf8')
console.log(rs);
用__dirname获取当前被执行文件的绝对路径,在被执行文件的上级目录中也可以执行(desktop是课堂练习代码的上级目录)
十.path模块
拼接路径:path.join()
作用:用来处理路径问题(拼接路径)
//引入
const path=require('path')
//使用 path.join() 可以拼接绝对路径
const rs=path.join(__dirname,'../test.txt')
console.log(rs);//获取文件的绝对路径 C:\Users\86159\Desktop\test.txt