美文网首页node
6-3 Node.js 键盘IO交互

6-3 Node.js 键盘IO交互

作者: 陈小陌丿 | 来源:发表于2016-09-13 17:35 被阅读462次

使用 readline 模块可以 获取用户输的信息,进而进行相关的业务处理。


下方是一个简单的 查询天气的案例
const http = require('http');
const readline = require('readline');

// 创建
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});


// 接口地址
// http://www.weather.com.cn/data/cityinfo/101010100.html
var root_url = 'http://www.weather.com.cn/data/cityinfo/';


// 城市列表
var city_list = {
    '1':{'name':'北京', 'code':'101010100'},
    '2':{'name':'上海', 'code':'101020100'},
    '3':{'name':'广州', 'code':'101280101'},
    '4':{'name':'深圳', 'code':'101280601'},
    '5':{'name':'珠海', 'code':'101280701'},
    '6':{'name':'杭州', 'code':'101210101'},
    '7':{'name':'福州', 'code':'101230101'},
    '8':{'name':'厦门', 'code':'101230201'},
};


// 缓存列表
var cache_list = new Object();


console.log("\n ============ 城市天气查询 ============ \n");
dump_city_list();


// 设置提示信息
rl.setPrompt('请输入城市编号:');

// 打印提示信息
rl.prompt();


// 绑定事件
rl.on('line', (line)=> {

    // 获取输入的字符串  并去掉多余的空格
    var id =  line.trim();

    // 如果是列表
    if(id === 'list'){
        dump_city_list();
        rl.prompt();
        return false;
    }


    // 转换成数字
    id = parseInt(id);
    if(isNaN(id)){
        console.log("\n 请输入正确的城市编号!或者输入 list 获取城市列表!\n");
        rl.prompt();
        return false;
    }


    // 获取城市代码
    var  current_city = city_list[id]
    if(!current_city || !current_city.code){
        console.log("\n 没有找到该城市的天气信息 \n");
        rl.prompt();
        return false;;
    }


    if(cache_list[id.toString()]){
        console.log(cache_list[id.toString()]);
        rl.prompt();
        return true;
    }


    // 组装查询URL
    var url = root_url +  current_city.code +'.html';


    // 发送请求
    http.get(url, function (res) {

        var data = '';
        res.on('data', function (chunk) {
            data += chunk;
        });

        res.on("end", function () {
            data = JSON.parse(data);
            if(!data || !data.weatherinfo){
                console.log("\n 网络错误!请稍后重试!");
                rl.prompt();
                return false;
            }

            data = data.weatherinfo;
            var dump_str = "\n"+"     "+data.city+'     天气:'+data.weather+'     温度:'+data.temp2 +'     更新时间:'+data.ptime+"   \n";


            // 写入缓存
            id = id.toString();
            if(!cache_list[id]){
               cache_list[id] = dump_str;
            }

            console.log(dump_str);
            rl.prompt();
            return true;

        });


     // 出错 返回信息
     }).on("error", function () {
         console.log("\n 网络错误!请稍后重试!");
         rl.prompt();
         return true;
     })

}).on('close', ()=>{
    console.log('已退出!');
    process.exit(0);
})


// 打印城市列表
function dump_city_list(){
  console.log("\n");
  console.log(" === 编号 === 城市名称 === 城市编号 === \n");
  for (var key in city_list){
    console.log('      '+ key+'         '+ city_list[key].name +'       '+ city_list[key].code);
    console.log(" ====================================== \n");
  }
}

相关文章

  • 6-3 Node.js 键盘IO交互

    使用 readline 模块可以 获取用户输的信息,进而进行相关的业务处理。 下方是一个简单的 查询天气的案例

  • node.js io&web交互

    node.js io&web交互 var readline = require('readline'); var ...

  • 第7天

    1.终端和node.js的io交互var readline = require('readline');var r...

  • 9/12 课堂笔记

    nodejs的模块 nodejs文件操作 nodejs的io键盘交互 nodejsURL判断渲染模板 fs.wri...

  • nodejs的基本操作

    nodejs的模块 代码展示: nodejs文件操作 代码展示: nodejs的io键盘交互 代码展示: node...

  • 笔记 第六天 nodejs模块

    nodejs模块 nodejs 的文件操作 nodejs的io键盘交互 nodejs的url判断渲染模板 node...

  • day6-课堂笔记

    本节课内容: NodeJS的模块 NodeJS的文件操作 NodeJS的io键盘交互 NodeJs的url判断渲染...

  • nodeJS基础

    Node.js REPL(交互式解释器) Node.js REPL(Read Eval Print Loop:交互...

  • node.js(五)

    Node.js REPL(交互式解释器) Node.js REPL(Read Eval Print Loop:交互...

  • IT兄弟会全栈工程师01班第5课笔记

    本课重点:学习使用Node.js中的'readline'模块实现终端的io交互功能,并衍生到web中静态页面上的i...

网友评论

    本文标题:6-3 Node.js 键盘IO交互

    本文链接:https://www.haomeiwen.com/subject/oegmettx.html