# 初识 Node.js
# Node.js 简介
# Node.js 概念
Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine.
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境
# Node.js 中的 JavaScript 运行环境
- 浏览器是 JavaScript 的前端运行环境
- Node.js 是 JavaScript 的后端运行环境
- Node.js 中无法调用 DOM 和 BOM 等浏览器内置的 API
# Node.js 环境中执行 JavaScript 代码
# 终端中的快捷键
- 使用 ↑ 键,可以快速定位到上一次执行的命令
- 使用 tab 键,能够快速补全路径
- 使用 esc 键,能够快速清空已经输入的命令
- 输入 cls 命令,可以清空终端
# fs 文件系统模块
# fs 文件系统模块简介
fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求
- fs.readFile () 方法:用来读取指定文件中的内容
- fs.writeFile () 方法:用来向指定的文件中写入内容
导入 fs
const fs = require('fs'); |
# 读取指定文件内容
# fs.readFile () 语法格式
const fs = require('fs'); | |
fs.readFile('./baozi.txt','utf8',function(err,dataStr) { | |
if(err) { | |
return console.log(err.message); | |
} | |
console.log(dataStr); | |
}) |
参数说明
- 参数 1:必选参数,字符串,表示文件路径
- 参数 2:可选参数,表示以什么编码格式来读取文件
- 参数 3:必选参数,文件读取完成后,通过回调函数拿到读取的结果
# 向指定文件中写入内容
# fs.writeFile () 的语法格式
const fs = require('fs'); | |
fs.write('./baozi.txt','HelloWorld','utf8',function(err) { | |
if(err) { | |
return console.log('写入数据失败' + err.message); | |
} | |
// 此时 err 为 null | |
console.log('写入数据成功' + err); | |
}) |
参数说明
- 参数 1:必选参数,需要指定一个文件路径的字符串,表示文件存放路径
- 参数 2:必选参数,表示要写入的内容
- 参数 3:可选参数,表示以什么格式写入文件,默认 utf8
- 参数 4:必选参数,文件写入完成后的回调函数
# path 路径模块
# path 路径模块简介
path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求
- path.join () 方法:用来将多个路径片段拼接成一个完整的路径字符串
- path.basename () 方法:用来从路径字符串中,将文件名解析出来
提前导入
const path = require('path'); |
# 路径拼接
# path.join () 语法格式
const path = require('path'); | |
const pathStr = path.join('/a','/b/c','../','d'); | |
console.log(pathStr); // 打印 /a/b/d | |
const pathStr2 = path.join(__dirname,'./baozi.txt'); | |
console.log(pathStr); // 输出 当前文件所处目录 /baozi.txt |
# 获取路径中的文件名
# path.basename () 的语法格式
const path = require('path'); | |
const fpath = '/a/b/c/index.html'; | |
var fullName = path.basename(fpath); | |
console.log(fullName); // 输出 index.html | |
var nameWithoutExt = path.basename(fpath,'.html'); | |
console.log(nameWithoutExt); // 输出 index |
# 获取路径中的文件扩展名
# path.extname () 语法格式
const path = require('path'); | |
const fpath = '/a/b/c/index.html'; | |
const fext = path.extname(fpath); | |
console.log(fext); // 输出.html |
# http 模块
# http 模块介绍
http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer () 方法,就
能方便的把一台普通的电脑,变成一台 Web 服务器,从而对外提供 Web 资源服务
导入 http 模块
const http = require('http'); |
# 进一步理解 http 模块作用
服务器和普通电脑的区别在于,服务器上安装了 web 服务器软件,例如:IIS、Apache 等。通过安装这些服务器软件,
就能把一台普通的电脑变成一台 web 服务器
在 Node.js 中,我们不需要使用 IIS、Apache 等这些第三方 web 服务器软件。因为我们可以基于 Node.js 提供的
http 模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供 web 服务
# 服务器相关的概念
# IP 地址
IP 地址就是互联网上每台计算机的唯一地址,因此 IP 地址具有唯一性
# 域名和域名服务器
尽管 IP 地址能够唯一地标记网络上的计算机,但 IP 地址是一长串数字,不直观,而且不便于记忆,于是人们又发明了另一套
字符型的地址方案,即所谓的域名(Domain Name)地址
IP 地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器 (DNS,Domain name server) 的电脑中。使用者
只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供 IP 地址和域名
之间的转换服务的服务器
# 端口号
在一台电脑中,可以运行成百上千个 web 服务。每个 web 服务都对应一个唯一的端口号。客户端发送过来的
网络请求,通过端口号,可以被准确地交给对应的 web 服务进行处理
# 创建最基本的 web 服务器
# 创建 web 服务器的基本步骤
- 导入 http 模块
- 创建 web 服务器实例
- 为服务器实例绑定 request 事件,监听客户端的请求
- 启动服务器
# 代码实现
// 1. 导入 http 模块 | |
const http = require('http'); | |
// 2. 创建 web 服务器实例 | |
const server = http.createServer(); | |
// 3. 为服务器绑定 request 事件,监听客户端请求 | |
server.on('request',(req,res) { | |
console.log('Some one visit our web server'); | |
}) | |
// 4. 启动服务器 | |
server.listen(80,() => { | |
console.log('http server is running...') | |
}) |
# req 请求对象
只要服务器接收到了客户端的请求,就会调用通过 server.on () 为服务器绑定的 request 事件处理函数
server.on('request',(req) { | |
// 1. 获取 url | |
const url = req.url; | |
// 2. 获取请求方式 | |
const method = req.method; | |
}) |
# res 响应对象
server.on('request',(req,res){ | |
res.end('已经响应到客户端'); | |
}) |
# 解决中文乱码
server.on('request',(req,res){ | |
res.setHeader('Content-Type','text/html; charset=') | |
res.end('已经解决中文乱码'); | |
}) |