NodeJs

初识Node.js

JavaScript运行环境

  1. V8 引擎负责解析和执行Javascript的代码

  2. 内置API是由运行环境提供的特殊接口,只能在所属的运行环境中被调用

Node.js简介

Node.js是一个基于Chrome V8 引擎的JavaScript运行环境

  1. 浏览器是JavaScript的前端运行环境

  2. Node.js是JavaScript的后端运行环境

  3. Node.js中无法调用DOM和BOM等浏览器内置的API

Node.js环境的安装

  1. 查看已安装的node.js的版本号

    1. 代开终端,中终端输入node -v,即可查看node.js的版本号

在Node.js环境中执行JavaScript代码

  1. 代开终端

  2. 输入node要执行的js文件的路径

fs文件系统模块

  1. fs模块是node.js官方提供的,用来操作文件的模块

  2. fs.readFile()方法,来读取指定文件中的内容

  3. fs.writeFile()方法,用来指定的文件中写入内容

  4. 在JavaScript代码中,使用fs模块来操作文件,则需要使用如下的方式导入

    const fs = require(‘fs’)

  5. fs.readFile()的语法格式

    fs.readFile(path[,options],callback)

    1. 参数1:必选参数,字符串,表示文件的路径

    2. 参数2:可选参数,表示以什么编码格式来读取文件

    3. 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果

    4. 判断文件是否读取成功,判断err对象是否为null

  6. fs.writeFile()的语法格式

    fs.writeFile(file,data[,options],callback)

    1. 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径

    2. 参数2:必选参数,表示要写入的内容

    3. 参数3:可选参数,表示以什么格式写入文件内容,默认值是utf8

    4. 参数4:必选参数,文件写入完成后的回调函数

    5. 判断文件是否读取成功,判断err对象是否为null

  7. fs 模块 - 路径动态拼接的问题

    1. 使用__dirname 表示当前文件的目录

path路径模块

  1. path模块是node.js官方提供的,用来处理路径的模块

  2. path.join()方法,用来讲多个路径片段拼接成一个完成的路径字符串

  3. __dirname 表示当前文件所处的目录

  4. path.basename()方法,用来从路径字符串中,将文件名解析出来

path.join([..paths])

参数:

  • …paths<String> 路径片段的序列

    • 返回值<String>

path.basename(path[,ext])

参数:

  • path<String> 必选参数,表示一个路径的字符串

  • ext<String> 可选参数,表示文件扩展名

创建最基本的web服务器

步骤1 导入http模块

const http = require(‘http’)

步骤2 创建web服务器实例

调用http.createServer() 方法,快速创建一个web服务器

1
const server = http.createServer()

步骤3 为服务器实例绑定request事件

1
2
3
4
5
// 使用服务器实例.on()方法,为服务器绑定一个request事件
server.on("request", (req, res) => {
// 只要有客户端来请求我们自己的服务器,就会触发request事件,从而调用事件的处理函数
console.log("Someone visit our web server")
})

步骤4 启动服务器

1
2
3
4
// 调用server.listen(端口号,cb回调)方法,即可启动web服务器
server.listen(80, () => {
console.log("http server running at http://127.0.0.1")
})

req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数,访问与客户端相关的数据或属性,可以用下面的方式

1
2
3
4
5
6
7
server.on("request", (req) => {
// req是请求对象,它包含了与客户端相关的数据和属性,例如
// req.url 是客户端请求的URL地址
// req.method 是客户端的method请求类型
const str = `Your request url is ${req.url},and request method is ${req.method}`
console.log(str)
})

res 响应对象

在服务器的request事件处理函数中,如果相访问与服务器相关的数据或属性,

1
2
3
4
5
6
7
server.on("request", (req, res) => {
// res是响应对象,它包含了与服务器相关的数据和属性
// 要发送到客户端的字符串
const str = `Your request url is ${req.url}, and request method is ${req.method}` // res.end() 方法的作用:
// 向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})

解决中文乱码的问题

1
2
3
4
5
6
7
8
server.on("request", (req, res) => {
// res是响应对象,它包含了与服务器相关的数据和属性
// 要发送到客户端的字符串
const str = `您请求的url地址是 ${req.url}, 请求的method类型是 ${req.method}` // 为了防止中文显示乱码的问题,需要设置响应头Content-Type 的值为text/html;charset=utf-8
res.setHeader("Content-Type", "text/html;charset=utf-8") // res.end() 方法的作用:
// 向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str)
})

根据不同的url响应不同的html内容

核心实现步骤

  1. 获取请求的url地址

  2. 设置默认的响应内容为404 Not Found

  3. 判断用户请求的是否为/ 或 /index.html首页

  4. 判断用户请求的是否为/about.html关于页面

  5. 设置Content-Type 响应头,防止中文乱码

  6. 使用res.end()把内容响应给客户端

1
2
3
4
5
6
7
8
9
10
11
server.on("request", (req, res) => {
const url = req.url // 1.获取请求的url地址
let content = "<h1>404 Not Found</h1>" // 2.设置默认的内容为404 Not found
if (url === "/" || url === "/index.html") {
content = "<h1>首页</h1>" // 3.用户请求的是首页
} else if (url === "/about.html") {
content = "<h1>关于页面</h1>" // 4.用户请求的是关于页面
}
res.setHeader("Content-Type", "text/html;charset=utf-8") // 5.设置Content-Type 响应头 防止中文乱码
res.end(content) // 6.把内容发送给客户端
})

案例- 实现clock时钟的web服务器

实现步骤

  1. 导入需要的模块

  2. 创建基本的web服务器

  3. 将资源的请求url地址映射为文件的存放路径

  4. 读取文件内容并响应给客户端

  5. 优化资源的请求路径

步骤1 - 导入需要的模块

1
2
3
const http = require("http")
const fs = require("fs")
const path = require("path")

步骤2 - 创建基本的web服务器

1
2
3
4
5
6
const http = require("http")
const server = http.createServer()
server.on("request", (req, res) => {})
server.listen(80, () => {
console.log("server running at http://127.0.0.1")
})

步骤3 - 将资源的请求url地址映射为文件的存放路径

1
2
3
4
// 3.1 获取客户端请求的url地址
const url = req.url
// 3.2 把请求的url地址,映射为本地文件的存放路径
cosnt fpath = path.join(__dirname,url)

步骤4 - 读取文件的内容并响应给客户端

1
2
3
4
5
6
fs.readFile(fpath, "utf8", (err, date) => {
if (err) {
return res.end("404 Not Found")
}
res.end(date)
})

步骤5 - 优化资源的请求路径

1
2
3
4
5
6
7
// 5.1 预定义空白的文件存放路径
let fpath = ""
if (url === "") {
fpath = path.join(__dirname, "./clock/index.html")
} else {
fpath = path.join(__dirname, "./colck", url)
}
文章作者: Mr. Fortunate
文章链接: https://www.fortunate.cool/2023/04/23/Node.js/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 fortunate

评论