目录
一、定义
什么是node呢?
Node.js是一个开源、跨平台的jsvascript 运行环境。
javascript的运行是在浏览器里面的,因为浏览器里有js的解析引擎,解析引擎是用来解析js代码,并运行,我们单独把浏览器里面的解析引擎拆下来,安装在我们的自己的电脑上。这样的话,我们不需要浏览器,也可以在电脑上运行js代码了。
官方说法:node.js是基于Chrome的v8 javascript引擎的运行环境,node.js才用事件事件驱动、非阻塞I/O模型,使其轻量化和高效。node.js的包管理生态是npm,npm是现在世界上最大的开源程序包库。
二、安装
下载地址:下载 | Node.js (nodejs.org)
版本识别号:v18.16.0
LTS:稳定版 官方推荐 建议安装
Current:最新版本 官方新出的api 体验
主版本号.子版本号.修订版本号 ----- 18.16.0 (子版本号为偶数的版本是稳定版本,奇数的版本是非稳定版本,修订版本号变化代表的只是内部bug的一些处理)
建议安装的是LTS的偶数版本
三、运行
方式一:直接在node命令行中写,缺点是不能保存只能查看
方式二:打开本地.js文件,node 文件名 (tab自动补全) 回车
四、nodejs的模块化
node.js的内置模块也叫作node.js的核心模块,它是node.js自带的模块,在下载了node.js后就会有的,并不需要从外部引入。
node.js关于模块的分类
- 内置模块
- 自定义模块 (我自己写的插件)
- 第三方模块(在npm上别人发表的开源软件)
五、nodejs的内置模块
模块 | 作用 | 常用 |
path模块 | 用于解析本地文件路径 | path.join() path.resolve() |
url模块 | 用于解析http请求路径 | url.parse() url.format() url.resolve() |
fs (flie system)模块 | 用于操作文件的 | fs.readFile() fs.readFileSync() fs.writeFile() fs.writeFileSync() fs.appendFile() fs.appendFileSync() fs.unlink() |
http模块 | 用于开启http服务器和发送http请求 | http.createServer() 创建好的服务.listen() |
六、导入
// 我们需要使用哪个模块就导入哪个模块
// 导入模块的语法就是require('模块名')
// 返回值:这个模块里面所有方法和属性的集合
const http = require('http')
const path = require('path')
const url = require('url')
const fs = require('fs')
七、path模块
1、path.join()
path.join()
将所有的给定的本地文件路径片段连接在一起
规范化生成的路径
== 语法:path.join('/目录1','/目录2','/目录3/目录4',...)
返回值:'/目录1/目录2/目录3/目录4'path、join() 拼接的时候传的是相对路径,拼接好后就是相对路径
path、join() 拼接的时候传的是绝对路径,拼接好后就是绝对路径
2、path.resolve()
使用的方式和join一样
区别:resolve拼接好之后都是绝对路径
八、Url模块
1、url.parse()
作用:把字符串形式的url网络路径解析成对象
语法:ur.parse(urlDtring[,parseQueryString[,slashesDenoteHost]])
- urlString:表示url网络地址,是一个字符串
- parseQueryString:是否解析查询字符串,默认是false
- slashesDenoteHost:如果为true,表示// 后面和前面是主机名(如果是完整的地址true和false就没有区别)
const url = require('url')
let str = 'https://blog.csdn.net/weixin_50863323/article/details/131810865?spm=1001.2014.3001.5502'
console.log(url.parse(str))
输出:
2、url.format()
作用: 把url对象合并成url地址字符串
语法: url.format(url对象)
返回值: url地址字符串
3、 url.resolve()
作用:把两端url片段,组合成一个完整的url
返回值:url地址字符串
console.log(url.resolve('https://www.baidu.com', '/api/gerLis?a=1'))
九、fs模块
1、fs.readFile()
专门用来"异步"读取文件内容的方法
语法:fs.radFile('你要读取的文件路径','读取文件的格式(选填)',读取成功后的回调函数)
第二个参数是字符集格式 一般是utf-8
const fs = require('fs')
fs.readFile('./text.txt', 'utf-8', function (err, data) {
// 这个函数是在文件读取完成后执行的函数
// 接受两个参数
// error =>读取失败的时候 返回的失败信息
// data => 读取成功的时候 读取的内容
console.log('文件读取失败', err)
console.log('文件读取成功', data)
})
2、fs.readFileSync()
专门用来"同步"读取文件内容的方法
语法:fs.radFileSync('你要读取的文件路径','读取文件的格式(选填)')
返回值:就是读取成功的时候读取的内容(data)
如果读取失败,直接打断整个程序,报错
const fs = require('fs')
let data = fs.readFileSync('./text.txt','utf-8')
console.log(data)
3、fs.writeFile()
专门用来"异步"写入文件的方法
语法:fs.writeFile('你要写入的文件路径','你要写入的内容',写入的成功回调函数)
这个方法在写入的时候,是完全覆盖的写法,原先的内容没有了
如果你要写入的文件不存在,那么会自动创建一个文件,并覆盖式写入
const fs = require('fs')
fs.writeFile('./text111.txt', 'hi', () => {
console.log('写入成功')
})
4、fs.writeFileSync()
专门用来"同步"写入文件的方法
语法:fs.writeFileSync('你要写入的文件路径','你要写入的内容')
// 导入fs模块
const fs = require('fs')
fs.writeFileSync('./gulugulu.miumiu', '呼吸')
5、fs.appendFile()
解决了fs.writeFile()的缺点
往文件追加写入内容
语法:fs.appendFile('你要写入的文件路径','你要写入的内容',写入的成功回调函数)
const fs = require('fs')
fs.appendFile('./text.txt',"hello(我是追加的)",()=>{
console.log('追加成功')
})
6、fs.appendFileSync()
十、http模块
node内置模块有一块http模块,这个模块专门用来开启服务器的,就是可以把一个电脑上的命令行窗口,当成一个服务器来使用,只能支持http协议。
http模块创建服务的方法
1 http.createServer(function(){})
返回值:一个服务
当这个服务监听一个端口号的时候,就变成了一个服务器
2 我们需要使用这个服务器监听一个端口号
我创建好的服务.listen(我要监听端口号,监听成功的回调函数(选填))
实现了一个根据接口的路由,输出相应页面
const http = require('http')
const url = require('url')
const fs = require('fs')
// 1 创建一个服务
let server = http.createServer(function(req,res){
// 请求路径
console.log(req.url)
// 解析请求路径,获取路由信息
let pathName=url.parse(req.url,true).pathname
console.log(pathName)
if(pathName == '/index.html'|| pathName == '/index'){
let data = fs.readFileSync('./public/index.html')
res.end(data)
}else{
res.end('<h1>404</h1>')
}
})
// console.log(server)
// 2 监听一个端口号
// 端口号 0-65535
// 不推荐使用 0-1023
server.listen(8080,function(){
console.log('监听8080端口成功')
})