前言
nodejs这个东西呢,说起来挺复杂的,但是我们还是得了解一下它,毕竟多一门技术也多一条路嘛,今天刚好有时间,就把以前学过的东西来整理一下,最开始学的时候,给我留下了不可磨灭的印象。
nodejs是什么
官方的概念是:Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时
我自己的理解是:是一个基于Chrome V8引擎的运行js代码的运行环境,它不是一个js文件,而是一个软件
学习node.js的意义
- 能够提高自己的竞争力
- 了解后端的一些工作流程
- 这是学习框架(Vue、React)的一个基础
node.js学习的内容
- 首先,node.js不是一个新的编程语言
- 一个是node.js的模块系统,利用这些模块系统可以来完成不同的功能,比如创建web服务器、写接口等等
- 另外一个就是NPM包管理工具
下载和安装
- 下载直接去官网搜就可以了,这里附上中文网的地址,里面有很多的API可以供我们查询(nodejs.cn/)
- 安装就很简单了,和其他普通的软件安装是一样的
- 安装后,怎么测试我们有没有安装成功呢,按下window键+R,在打开的窗口输入cmd打开命令提示符,就是下面这个小黑窗啦,
然后输入命令 node -v,如果出现版本号,就显示我们安装成功了
打开小黑窗的四种方式
- 方法一:cmd窗口(window+R, --->运行-->录入cmd,回车)
- 方法二:在资源管理器中,打开任意目录,直接在地址栏中写入
cmd,并回车 - 方法三:powershell(window10操作系统),在资源管理器中按下shift,同时点击鼠标右键,可以选择在此处打开powershell/命令行窗口。
- 方法四:vscode中的右键,在命令行中运行
在node环境下怎么运行js代码
- 先准备一个js文件
- 写命令来执行
格式是:node 要执行的文件的路径
注意:node后面有一个空格
其实说白了,nodejs是一个环境,可以来跑js代码
node.js里面的常用命令
node 空格 某个js文件 # 调用 node 程序,运行某个js文件
clear 或者 cls # 清空界面
ls/dir # 查看列表(list)
cd 目录名 # 进入到目录中去
cd .. # 返回上一级目录
cd \ # 直接回到根目录
Ctrl+C # 停止 Node 程序
输入部分文件名后按下 Tab 键 // 补全文件名 或 目录名, 多次tab会进行切换
↑ ↓ 上下箭头 # 切换历史输入
浏览器端和node.js的区别
相同点:
- 都是一个运行js代码的容器
- 都是一个宿主环境
不同点: - node.js环境运行js的时候不能使用DOM,BOM以及window对象
- node.js环境可以去实现后端的一些功能
- 浏览器端环境可以去实现前端的一些功能
node.js里面的模块分类
- 核心模块:就是node.js内置或者自带的模块,我们可以直接拿过来使用
- 自定义:我们程序员自己写好的模块,相当于js里面的自定义一个函数
- 第三方模块:别人写好的模块,我们拿过来使用的
核心模块fs
- 核心模块就是Node内置的模块,需要通过唯一的标识码来进行获取
- 每一个核心模块都是暴露了一个对象,里面包含一些方法来供我们使用
- 一般加载核心模块的时候,变量的起名最好和核心模块的标识名一样
例如:
//1. 引入
const fs = require('fs')
console.log(fs)
//2. 调用
fs.各种API(实参)
1. fs.readFileSync-文件读取
const fs=require('fs')
let res=fs.readFileSyn('文件路径','utf8')
//res就是读出来的内容
console.log(res)
注意:api的名字结尾有Sync(async是异步的,sync表示同步的)
如果读取成功,会获取读出来的数据,如果读取失败,后面的代码就不会执行
解决这个问题的方法:用try.catch结构
try {
//可能会有错误的代码
let res = fs.readFileSync('./01-第一个在node上面跑的文件.js', 'utf-8')
console.log(res)
} catch (error) {
//如果try里面的代码有错误,就会进入catch,并把错误传进来(在这里处理错误)外面的代码还是会执行
console.log('报告,有错误发送')
console.log(error)
}
console.log(125)
// 1.一般情况下 程序报错后面的代码就不会执行
// 2.加了try catch后,处理错误后,外面的代码会正常执行
2. fs-writeFileSync-文件写入
功能:向指定文件中写入字符串, 如果没有该文件则尝试创建该文件。
格式:
const fs=require('fs')
fs.writeFileSync(pathName, content, option)
//1. 第一个参数是文件的路径
//2. 第二个参数是要写入的内容(类型是字符串类型或者Buffer类型)
//3. 第三个参数是配置项(可选),设置写入的字符集,默认是utf-8
注意:它是覆盖写入,会把文件中的内容全部删除,再填入新的内容。
- 写入普通的字符串类型的数据
const fs = require('fs')
fs.writeFileSync('./a.txt', 'hello world! \n 换一行')
- 把数据写入文件中
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))
路径问题-使用绝对路径
nodejs中提供了两个全局变量来获取获取绝对路径:
- __filename:获取当前被执行的文件的绝对路径
- __dirname:获取当前被执行的文件的文件夹所处的绝对路径
在文件操作时,使用绝对路径
只需要在读入文件时,在文件名的前面拼接上路径:
// 拼接html5.jpg的绝对路径
// 1) 找到当前文件夹的绝对路径
console.log(__dirname)
// 2) 加上 html5.jpg
const fs = require('fs')
const filePath = __dirname + '\\rs.txt'
// 走一步,看一步
console.log(filePath)
const rs = fs.readFileSync(filePath)
核心模块path
1.引入模块
const path = require('path')
2. 调用API
path.各种api(参数)
###常用的Api
- path.basename() :此方法返回
path的最后一部分。一般可用来获取路径中的文件名。 - path.join() :路径拼接。
- path.parse(pathurl) :把一个路径转成一个对象
使用path模块解决文件读写中的路径拼写
// 拼接html5.jpg的绝对路径
// 1) 找到当前文件夹的绝对路径
console.log(__dirname)
// 2) 加上 html5.jpg
const fs = require('fs')
const path = require('path')
const filePath = path.join(__dirname, 'html5.jpg')
// const filePath = __dirname + '\\html5.jpg'
// 走一步,看一步
console.log(filePath)
fs.readFile(filePath,function(err, data) {
if(err) {
console.log(err)
return
}
console.log(data)
})
需求:对JSON数据进行操作,往data.json文件里面的数组中添加一条内容
文件data.json里面的内容如下
[{"name":"小王"},{"name":"小李"}]
我们自己写的js文件
//1. 先引入模块
const fs = require('fs')
const path = require('path')
//2. 看一下自己的模块引进来没有
// console.log(fs)
//3.调用api
//3.1 使用绝对路径
let fileName = path.join(__dirname, 'data.json')
// console.log(fileName)
//3.2 读取这个文件,并把文件里面的内容转换成对象
let arr = JSON.parse(fs.readFileSync(fileName, 'utf-8'))
//3.3 往这个对象里面添加我们要加的内容
arr.push({ name: '小张' })
//3.4 把我们添加好的数据,转换成json格式,并写入到data文件中
arr = JSON.stringify(arr)
fs.writeFileSync(fileName, arr, 'utf-8')
最后运行的结果:
[{"name":"小王"},{"name":"小李"},{"name":"小张"}]
成功添加一条数据!