Node.js简介
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 中的 JavaScript 运行环境
浏览器是 JavaScript 的前端运行环境。
Node.js 是 JavaScript 的后端运行环境。
Node.js 环境的安装
node.js官网:https://nodejs.org/en/
网页下载中有两种版本:LTS和Current版本。LTS为长期稳定版(推荐安装),Current是比较新的版本,带有新特性但可以存在Bug或漏洞。
安装过程一般都是默认即可(路径本人改了),验证是否安装成功:打开cmd,输入node -v, 查看到版本号就是安装成功。
小案例(使用node 运行js文件):
(1)新建文件夹,新建1.js文件,包含console.og(‘Hello!’)
(2)选中文件夹路径,输入cmd,快速进入该路径下的终端
(3)node 1.js 运行文件
fs文件系统模块
fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
要在 JavaScript 代码中使用 fs 模块来操作文件,需要导入:
const fs =require('fs')
读取指定文件中的内容
fs.readFile() 方法,可以读取指定文件中的内容。
格式:
fs.readFile(path[,options],callback)
//path必选参数,表示文件路径
//第二个参数为可选参数,编码格式
//callback为必选参数,回调函数拿到读取的结果
示例:
// 导入 fs 模块
const fs = require('fs')
// 读取文件时候采用的编码格式,一般默认指定 utf8
// 回调函数,失败或成功:err dataStr
fs.readFile('./files/1.txt', 'utf8', function(err, dataStr) {
// 读取成功,err 的值为 null
// 读取失败,err 的值为错误对象,dataStr的值undefined
if(err){
return console.log('读取失败!'+ err.message)
}
console.log("读取成功!" + dataStr)
})
向指定的文件中写入内容
fs.writeFile() 方法,可以向指定的文件中写入内容。
(只能用来创建文件,不能创建路径;重复写入同一个文件会覆盖内容)
格式:
fs.writeFile(path,data[,options],callback)
//path必选,文件路径
//data必选,要写入的数据
//可选参数,写入文件内容的格式,默认utf8
//callback必选参数,文件写入完成后的回调函数
示例:
const fs = require('fs')
//fs.writeFile() 方法,写入文件的内容
fs.writeFile('./files/2.txt', 'lizhi', function(err) {
// 文件写入成功,则 err 的值等于 null
//文件写入失败,则 err 的值等于一个错误对象
// console.log(err)
if (err) {
return console.log('文件写入失败!' + err.message)
}
console.log('文件写入成功!')
})
fs路径动态拼接的问题
在使用 fs 模块操作文件时,如果使用路径是以 ./ 或 …/ 开头的相对路径时,很容易出现问题:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。
解决方法:文件路径使用**_ _dirname + ‘文件根路径’**; _ _dirname表示当前文件所在的目录
path路径模块
path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
如果在 JavaScript 代码中使用 path 模块来处理路径,需要导入:
const path = reqiure('path')
路径拼接
path.join() 方法,可以把多个路径片段拼接为完整的路径字符串。
格式:
path.join([...paths])
//参数是路径序列,返回值是string
示例:
const path = require('path')
const fs = require('fs')
// ../ 会抵消前面的路径
const pathStr = path.join('/a', '/b/c', '../', './d', 'e')
console.log(pathStr)
// 输出\a\b\d\e
fs.readFile(__dirname + '/files/1.txt')
//拼接路径,代替使用+号连接
fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function(err, dataStr) {
if (err) {
return console.log(err.message)
}
console.log(dataStr)
})
获取路径中的文件名
path.basename() 方法,获取路径中的最后一部分,一般用来获取路径中的文件名。
格式:
path.basename(path[,ext])
//path必选参数,路径
//ext可选参数,文件拓展名
//返回路径最后一部分,string
示例:
const path = require('path')
// 定义路径
const fpath = '/GDUF/lizhi/index.html'
// const fullName = path.basename(fpath)
// console.log(fullName)
//输出index.html
const name= path.basename(fpath, '.html')
console.log(name)
//输出index
获取路径中的文件扩展名
path.extname() 方法,可以获取路径中的扩展名部分。
格式:
path.extname(path)
//path必选,路径
//返回拓展名,string
示例:
const path = require('path')
// 这是文件的存放路径
const fpath = '/GDUF/lizhi/index.html'
const fext = path.extname(fpath)
console.log(fext)
//输出.html
http模块
http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。使用需要先导入它:
const http = require('http')
补充服务器相关的概念
ip地址
IP 地址就是互联网上每台计算机的唯一地址,因此 IP 地址具有唯一性。
IP 地址的格式:一般用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d 都是 0~255 之间的十进制整数。(开发期间,可以在浏览器中输入 127.0.0.1,可以访问自己的电脑)
域名和域名服务器
IP地址是一长串数字不方便记忆,于是有了域名(Domain Name)地址。
IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中。域名服务器就是提供 IP 地址和域名之间的转换服务的服务器。
端口号
根据不同端口号,把请求交给对应的web服务器进行处理
使用http模块创建最基本的服务器
步骤:
导入 http 模块–>创建 web 服务器实例–>为服务器实例绑定 request 事件,监听客户端的请求–>启动服务器
//导入http模块
const http = require('http')
//创建web服务器
const server = http.createServer()
//给服务器绑定request事件
server.on('request', (req,res) =>{
console.log('someone visit web server')
})
//访问时,终端会看到这句话
//启动服务器
server.listen(80, () => {
console.log('http server running at http://127.0.0.1')
})
req请求对象和res 响应对象
调用通过 server.on() 为服务器绑定的 request 事件处理函数。示例:
//其他步骤相同,修改request事件部分代码:
//给服务器绑定request事件
server.on('request', (req,res) =>{
const url = req.url
const method = req.method
//这里用的时模板字符串的符号:``
const str = `Your request url is ${url}, request method is ${method}`
console.log(str)
//向客户端发送指定内容,并结束请求
res.end(str)
})
访问效果图:
解决中文乱码问题
//其他步骤相同,这里省略
//给服务器绑定request事件
server.on('request', (req,res) =>{
const url = req.url
const method = req.method
const str = `你请求的地址是 ${url}, 请求的方式是 ${method}`
//防治中文乱码
res.setHeader('Content-Type','text/html; charset=utf-8')
console.log(str)
res.end(str)
})