request 事件
语法:服务器.on('request', (req.res) => {
函数体
})
1.req请求对象
1.req.url 是客户端请求的 url 地址
2.req.method 是客户端请求的 method 类型
代码模块展示:
// 导入 http 模块
const http = require('http')
// 创建一个服务器
const server = http.createServer()
// 为服务器添加 request 事件
// req 是请求对象,它包含了客户端相关的数据和属性
server.on('request', (req) => {
// req.url 是客户端请求的 URL 地址
// 注意请求的 url 地址是从端口号开始的,这里不会把完整的地址当作 url 地址
const url = req.url
// req.method 是客户端请求的 method 类型 method请求类型有 get请求 和 post请求
const method = req.method
const str = `Your request url is ${url}, and request method is ${method}`
console.log(str)
})
// 启动服务器
server.listen(80, () => console.log('server running at http://127.0.0.1')) // Your request url is /, and request method is GET
执行结果:
2.res请求对象
1.res.end() 方法:给客户端响应一些内容
语法:res.end(响应内容)
参数:响应内容
返回值:无
代码模块展示:
// 导入 http 模块
const http = require('http')
// 生成一个服务器
const server = http.createServer()
// 为服务器添加 request 事件
server.on('request', (req, res) => {
// 打印请求对象的 url地址 和 请求方式
const str = `Your request url is ${req.url}, Your request method is ${req.method}`
console.log(str)
// 使用 res.end() 方法向客户端响应一些内容
res.end(str)
})
// 启动服务器
server.listen(80, () => console.log('server running at http://127.0.0.1 '))
执行结果:
2.res.setHeader()方法:解决响应中文时乱码问题
语法:res.setHeader('Content-Type', 'text/html; charset=utf-8')
参数:参数1:'Content-Type' 参数2:'text/html; charset=utf-8'
返回值:无
代码模块展示:
// 导入 http 模块
const http = require('http')
// 生成一个服务器
const server = http.createServer()
// 为服务器添加 request 事件
server.on('request', (req, res) => {
// 打印请求对象的 url地址 和 请求方式
const str = `你请求的url地址为 ${req.url}, 请求 method 类型为 ${req.method}`
console.log(str)
// 使用 res.setHeader()方法,设置 Content-Type 响应头,解决中文乱码问题
res.setHeader('Content-Type', 'text/html; charset=utf-8')
// 使用 res.end() 方法向客户端响应一些内容
// 当不做处理直接响应中文内容时会出现中文乱码问题
res.end(str)
})
// 启动服务器
server.listen(80, () => console.log('server running at http://127.0.0.1 '))
执行结果:
request 请求事件的注意点:
1.当请求第一次请求到的文件中引入其他文件时,就会继续请求,典型就是 html文件中 引入 script文件 和 style样式文件时
2.以html文件引入 css 和 js 文件为例:请求了三次发现每次的url地址都不同,分别是
第一次: /
第二次:/index.css
第三次:/index.js
所以每次要读取的路径不能写死
代码模块详解:
// 引入 path 模块
const path = require('path')
// 引入 fs 模块
const fs = require('fs')
// 引入 http 模块
const http = require('http')
// 创建一个服务器
const server = http.createServer()
// 给服务器添加 request 事件
server.on('request', (req, res) => {
// 获取客户端请求 url地址
let url = req.url
// 打印每次的 url地址
// 第一次的url地址为: /
// 第二次的url地址为: /index.css
// 第三次的url地址为: /index.js
// 因为每次的url地址都不一样 所以要读取的路径不能写死
console.log(url)
let fpath = ''
// 判断 url 的值
if (url === '/') {
fpath = path.join(__dirname, url, './code/index.html')
} else {
fpath = path.join(__dirname, './code', url)
}
// 读取客户端请求的文件
fs.readFile(fpath, 'utf8', (err, dataStr) => {
// 判断是否读取到了内容
if (err) return res.end('404 is not found')
// 将读取到的内容 相应给客户端
res.end(dataStr)
})
})
// 启动服务器
server.listen(80, () => console.log('server running at http://127.0.0.1'))
每次打印的url结果如下: