Node.js中的request事件

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结果如下:

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值