node内置模块——event模块


event订阅发布模式实现函数解耦。

  • event.on(函数名,箭头函数):进行事件监听
  • event.emit(函数名,传递的参数):触发事件

基本使用格式

const EventEmitter = require("events")

const event = new EventEmitter()

// 监听
event.on("play", (data) => {
    
    
    console.log("事件被触发了")
    console.log(data)
})
event.on("run", (data) => {
    
    
    console.log("事件被触发了")
    console.log(data)
})


// 触发事件
event.emit("play", "1111我是play参数")
event.emit("run","1111我是run参数")

event.emit 触发 event.on中的函数运行
运行输出:

事件被触发了
1111我是play参数
事件被触发了
1111我是run参数

event解决异步问题

异步问题:

var http = require("http")
var https = require("https")
var url = require("url")
http.createServer((req, res) => {
    
    
    var urlobj = url.parse(req.url, true)
    
    res.writeHead(200, {
    
    
        "Content-Type": "application/json;charset=utf-8",
        // cors头,允许跨域
        "access-control-allow-origin":"*"
    })

    switch (urlobj.pathname) {
    
    
        case "/hello":
            // 拿数据
            httpget((data) => {
    
    
                res.end(data)
            })
            break;
        default:
            res.end("404")
    }
}).listen(3000, () => {
    
    
    console.log("服务器启动成功")
})

function httpget(cb) {
    
    
    var data = ""
    // http还是https视请求的网站而定
    https.get(`https://i.maoyan.com/`, (res) => {
    
    
        // 获取数据的过程
        res.on("data", (chunk) => {
    
    
            data+=chunk
        })
        // end是获取的最终数据
        res.on("end", ()=>{
    
    
            console.log(data)
             // 将数据返回给前端
            cb(data)
        })
    })
   
}

代码中:

            httpget((data) => {
    
    
                res.end(data)
            })

传递的参数是回调函数,等获取到数据之后才进行执行,这就是异步。
event的订阅发布模式解决异步:

const EventEmitter = require("events")
var http = require("http")
var https = require("https")

var event = null
var url = require("url")
http.createServer((req, res) => {
    
    
    var urlobj = url.parse(req.url, true)
    
    res.writeHead(200, {
    
    
        "Content-Type": "application/json;charset=utf-8",
        // cors头,允许跨域
        "access-control-allow-origin":"*"
    })

    switch (urlobj.pathname) {
    
    
        case "/hello":
            event = new EventEmitter()
            event.on("play", (data) => {
    
    
                console.log(data)
                res.end(data)
            })
            // httpget()中执行event.emit进行触发
            httpget()
            break;
        default:
            res.end("404")
    }
}).listen(3000, () => {
    
    
    console.log("服务器启动成功")
})

function httpget(cd) {
    
    
    var data = ""
    // http还是https视请求的网站而定
    https.get(`https://www.kuaikanmanhua.com/`, (res) => {
    
    
        // 获取数据的过程
        res.on("data", (chunk) => {
    
    
            data+=chunk
        })
        // end是获取的最终数据
        res.on("end", ()=>{
    
    
            console.log(data)
             // 将数据返回给前端
            event.emit("play",data)
        })
    }) 
}

猜你喜欢

转载自blog.csdn.net/mantou_riji/article/details/125162563