使用 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");
}
}
网友评论