欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node的事件處理和readline模塊詳解

 更新時(shí)間:2022年02月23日 15:58:32   作者:Han_Zhou_Z  
這篇文章主要為大家詳細(xì)介紹了Node的事件處理和readline模塊,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、Node的事件處理

1、采用事件驅(qū)動(dòng)模型

2、Node是單線程的,采用事件輪詢方式來(lái)處理事件

3、事件機(jī)制中的三個(gè)角色:

事件(Event)、事件發(fā)生器(EventEmitter)、事件監(jiān)聽(tīng)器(EventListener)

const http = require('http');
 
//創(chuàng)建服務(wù)器對(duì)象
let server = http.createServer();
 
//給服務(wù)器對(duì)象綁定事件request
server.once('request',function (req,res){
    console.log('----request-1----')
})
 
server.on('request',function (req,res) {
    console.log('請(qǐng)求地址:',req.url)
    res.end('Hello World')
})
 
server.once('request',function (req,res) {
    console.log('---- Response End ----')
})
//服務(wù)器啟動(dòng)監(jiān)聽(tīng)
server.listen(8089,'127.0.0.1')
 
//在網(wǎng)址處查找http://127.0.0.1:8089
//    ----request-1----
//    請(qǐng)求地址: /
//    ---- Response End ----
//    請(qǐng)求地址: /favicon.ico
 
//頁(yè)面處顯示Hello World
const EventEmitter = require('events').EventEmitter;
const emitter = new EventEmitter();
 
emitter.on('beep',function (){  //先執(zhí)行這個(gè)回調(diào)函數(shù),輸出beep
    console.log('beep')
})
 
emitter.on('beep',function (){  //然后再執(zhí)行這個(gè)回調(diào)函數(shù),拋出一個(gè)錯(cuò)誤,會(huì)被catch接收到
    throw Error('oops!');       //因?yàn)檫@個(gè)函數(shù)執(zhí)行完之后,發(fā)生異常,已經(jīng)被扔出去,所以后面的函數(shù)就不會(huì)再被執(zhí)行
})
 
emitter.on('beep',function (){
    console.log('beep again!');
})
 
//手動(dòng)觸發(fā)事件
try{
    emitter.emit('beep')
}catch (e) {
    console.log(e.message)  //e.message指得就是Error對(duì)象。message對(duì)應(yīng)的就是error對(duì)象的字符串(oops)
}
 
//    beep
//    oops!

二、通過(guò)Node的readline模塊實(shí)現(xiàn)終端的輸入

1、標(biāo)準(zhǔn)輸入輸出:鍵盤(pán)、鼠標(biāo)、顯示器

2、使用方法

(1)引入:require('readline')

(2)創(chuàng)建readline對(duì)象(接口)

(3)調(diào)用接口的相關(guān)方法

(4)監(jiān)聽(tīng)和處理readline事件

onst  readline = require('readline');
 
//創(chuàng)建readline實(shí)例(接口對(duì)象)
let r1 = readline.createInterface({
    input: process.stdin,
    output : process.stdout
})
 
//調(diào)用接口方法
r1.question("請(qǐng)輸入姓名:",function (answer) {  //有一個(gè)輸入提示,輸入數(shù)據(jù)后,會(huì)開(kāi)始調(diào)用回調(diào)函數(shù)
    console.log("姓名是:",answer)  //將輸入的字符串,賦給回調(diào)函數(shù)的參數(shù)answer,然后輸出
    r1.close()  //用r1這個(gè)方法去觸發(fā)這個(gè)close事件
})
 
//給readline實(shí)例綁定close事件
r1.on('close',function (){   //事件觸發(fā)后,整個(gè)進(jìn)程才能結(jié)束
    process.exit(0)
})
 
//    請(qǐng)輸入姓名:云汐(云汐需要自己手動(dòng)輸入后,點(diǎn)擊回車(chē))
//    姓名是: 云汐
const readline = require('readline');
const r1 = readline.createInterface(process.stdin,process.stdout);
 
r1.setPrompt('Test>');  //方法setPromat(promat) ,就是給每一行設(shè)置一個(gè)提示符,
                        //就好比window命令行的> ,這里設(shè)置的是Test>
 
r1.prompt();     //prompt()是最重要的方法,因?yàn)樗w現(xiàn)了readline的核心作用,
                 //以行為單位讀取數(shù)據(jù),prompt方法就是在等待用戶輸入數(shù)據(jù)
 
 
r1.on('line',function (line){ //監(jiān)聽(tīng)了'line' 事件,因?yàn)閜rompt方法調(diào)用一次就只會(huì)讀取一次數(shù)據(jù)
    switch (line.trim()){
        case 'copy':
            console.log('復(fù)制');
            break;
        case 'hello':
            console.log('world')
            break
        case 'close':
            r1.close()
            break
        default:console.log('沒(méi)有找到命令')
            break
    }
    r1.prompt()  //所以,在這個(gè)方法又調(diào)用了一次prompt方法,這樣就可以繼續(xù)讀取用戶輸入,從而達(dá)到一種命令行的效果
});
r1.on('close',function (){
    console.log('bye bye');
    process.exit(0)
})

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!   

相關(guān)文章

  • 為nuxt項(xiàng)目寫(xiě)一個(gè)面包屑cli工具實(shí)現(xiàn)自動(dòng)生成頁(yè)面與面包屑配置

    為nuxt項(xiàng)目寫(xiě)一個(gè)面包屑cli工具實(shí)現(xiàn)自動(dòng)生成頁(yè)面與面包屑配置

    這篇文章主要介紹了為nuxt項(xiàng)目寫(xiě)一個(gè)面包屑cli工具實(shí)現(xiàn)自動(dòng)生成頁(yè)面與面包屑配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Nodejs學(xué)習(xí)筆記之Global Objects全局對(duì)象

    Nodejs學(xué)習(xí)筆記之Global Objects全局對(duì)象

    本文是NodeJS學(xué)習(xí)筆記系列文章的第二篇,從這篇開(kāi)始我們就根據(jù)官方文檔來(lái)逐個(gè)學(xué)習(xí)下NodeJS的各個(gè)模塊,首先我們來(lái)學(xué)習(xí)下Global
    2015-01-01
  • Nodejs?Docker鏡像體積優(yōu)化實(shí)踐詳解

    Nodejs?Docker鏡像體積優(yōu)化實(shí)踐詳解

    這篇文章主要為大家介紹了Nodejs?Docker鏡像體積優(yōu)化實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 使用node打造自己的命令行工具方法教程

    使用node打造自己的命令行工具方法教程

    這篇文章主要介紹了使用node打造自己的命令行工具方法教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 詳解nodeJS之二進(jìn)制buffer對(duì)象

    詳解nodeJS之二進(jìn)制buffer對(duì)象

    本篇文章主要介紹了nodeJS之二進(jìn)制buffer對(duì)象,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Node.js視頻流應(yīng)用創(chuàng)建之后端的全過(guò)程

    Node.js視頻流應(yīng)用創(chuàng)建之后端的全過(guò)程

    這篇文章主要給大家介紹了關(guān)于創(chuàng)建Node.js視頻流應(yīng)用之后端的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 詳解在express站點(diǎn)中使用ejs模板引擎

    詳解在express站點(diǎn)中使用ejs模板引擎

    本篇文章主要介紹了在express站點(diǎn)中使用ejs模板引擎,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • node.js入門(mén)教程

    node.js入門(mén)教程

    這篇文章主要介紹了node.js入門(mén)教程,講解了node.js在linux和windows下的安裝,模塊的概念,NPM的使用等等,是一篇不錯(cuò)的nodejs入門(mén)文章,需要的朋友可以參考下
    2014-06-06
  • Node.js與Sails ~項(xiàng)目結(jié)構(gòu)與Mvc實(shí)現(xiàn)及日志機(jī)制

    Node.js與Sails ~項(xiàng)目結(jié)構(gòu)與Mvc實(shí)現(xiàn)及日志機(jī)制

    Sails是一個(gè)Node.js的中間架構(gòu),很方便的幫助我們搭建web應(yīng)用程序。還有node.js與Sails日志機(jī)制在本文中也講到了,需要的朋友可以一起學(xué)習(xí)下
    2015-10-10
  • sublime text配置node.js調(diào)試(圖文教程)

    sublime text配置node.js調(diào)試(圖文教程)

    下面小編就為大家分享一篇sublime text配置node.js調(diào)試(圖文教程),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11

最新評(píng)論