-
谷歌浏览器内运行一个V8的JS引擎,该引擎负责接收JS代码,优化代码,然后在计算机上执行。
-
node.js: JS代码用于服务器端脚本而开发的环境。
- 开源
- 跨平台:不局限于单一的操作系统或硬件架构
- JS运行时环境
- node.js如何工作?
- V8引擎:包含一个内存堆(数据存储)和调用堆栈(管理函数执行顺序的数据结构)。
- Libuv:执行输入/输出(I/O)操作的C语言库。Libuv是跨平台的(可以在任何操作系统上运行),并且专注于异步I/O。
- Event Loop:事件循环运行时,会检查调用栈是否为空。如果调用栈不空,它就会允许正在进行的进程继续。但如果调用栈为空,它就会将回调队列中的第一条指令发送给 JavaScript 引擎。然后,引擎会将该指令(函数)放入调用栈并执行。
-
node.js是基于谷歌V8引擎的JS运行环境。(后端) 在前端中运行环境为浏览器。
-
查看node版本号: node -v
-
在node.js中执行js代码:
1. 进入终端 2. 输入node要执行的JS文件名
1.fs文件系统模块
fs模块时Node.js提供, 用来操作文件的模块,提供了一系列方法和属性,用来满足需求。
1. fs.readFile()读物指定文件中的内容
fs.readFile(path[, options], callback)
path: 字符串, 表示文件路径
options: 以什么编码格式来读取文件(默认指定utf8)
callback: 文件读取完成后, 通过回调函数拿到读取结果(err, dataStr)。
注意:读取成功,则err为null
读取失败, err为错误对象,datastr为undefined
2. **fs.writeFile()指定文件中写入内容**
fs.writeFile(file, data[, options], callback)
file: 指定一个文件路径的字符串,表示文件的存放路径。
data: 写入的内容
options: 什么格式写入文件内容
callback: 文件写入完成后的回调函数
join() 将数组转化为字符串,是关于数组的方法。
split() 将字符串切割成数组,是关于字符串的方法。
处理文件路径问题:
在使用fs模块操作文件时,如果提供的操作路径以./或…/开头的相对路径时,很容易出现路径动态拼接错误的问题。
原因: 是因为代码在运行的时候,会以执行node命令时所处的目录,动态拼接出被操作文件的完整路径。
解决: 使用fs模块操作文件时,给出完整路径—绝对路径
__dirname表示当前文件所处的目录
2.path路径模块
处理路径的模块。
-
path.join() 多个路径片段拼接为完整的路径字符串。
path.join([...paths]) ...paths<string>路径片段的序列 返回值<string>
-
path.basename() 获取路径中最后一部分,通常获取路径中的文件名。
path.basename(path[, ext]) path<string>, 表示一个路径的字符串 ext<string>, 表示文件扩展名 返回:<string>表示路径中的一部分
-
path.extname() 可以获取路径中的扩展部分
path.extname(path) path<string>, 表示一个路径的字符串 返回:<string>返回得到扩展名的字符串
3.http模块
用来创建web服务器的模块。
-
创建web服务器的基本步骤:
1. 导入http模块 2. 创建web服务器实例 3. 为服务器实例绑定request事件,监听客户端请求 4. 启动服务器
// 1. 导入HTTP模块
const http = require('http')
// 2. 创建web服务器实例
const server = http.createServer()
// 3. 为服务器实例绑定request事件,触发回调函数,
// 里面有req请求对象(包含客户端相关数据和属性),
// res参数(向客户端返回相应内容) res.end()向客户端发送指定的内容,并结束这次请求的处理过程
server.on('request', function(req, res){
console.log('someone visit web server');
})
// 4. 启动服务器
server.listen(80, function(){
console.log('server running at http://127.0.0.1');
})
注意: 当调用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题
解决办法: res.setHeader(‘Content-Type’, ‘text/html; charset=utf-8’)
-
根据不同的url响应不同的html内容
基本步骤: 1. 获取请求的url地址 2. 设置默认的响应内容 3. 判断用户请求的是否为 / 或者 /index.js 4. 判断用户请求的是否是/about.html 5. 设置Content-Type 响应头,防止中文乱码 6. 使用res.end() 把内容响应给客户端
4.模块化
模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。
加载模块: 使用require(),可以加载需要的内置模块、用户自定义模块、第三方模块使用。
当使用require()方法加载其他模块时,会执行加载模块中的代码。
向外共享模块作用域中的成员:
module对象: 每一个 .js自定义模块中都有一个module对象,它里面存储了和 当前模块有关的信息。
module.exports 对象:(默认为空对象)
在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用。
外界用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。
exports对象: 和module.exports指向一样,但是最终以module.exports所指向对象为主。