Nodejs写一个简单的监听服务器程序

前言

刚开始学习nodejs,边看书边敲代码,写了一个简单的服务器监听程序,希望能对Node新手有帮助,OK,进入正文。
程序的功能很简单,监听某个服务器,如果服务器无法访问则发邮件和短信通知服务器宕机,如果修复好了发短信通知。
用到的模块或插件

  • node和npm(基础,没有安装的赶紧装一下吧)
  • nodemailer(node发送邮件)
  • alidayu-node(阿里大于短信服务)

开始

首先在node下安装相关服务

npm install nodemailer alidayu --save

新建app.js,引入http模块

var http = require('http');

现在我们要使用node内置的http模块

//为了方便我在自己电脑使用node起了一个端口3000的本地服务
var options = {
    hostname: 'localhost',//这里可以填入你要监控的服务器url
    port: '3000',
    path: '/',
    method: 'GET'
};

var addcheck = true;//定义一个开关
http.request(options,function(){
     //发送邮件的代码
})
//当请求网站返回错误,也就是网站不可访问时的处理代码
http.on('error',function(){
      
})

邮件功能

基础搭建好了,我们要开始填充发送邮件的代码了.首先使用nodemailer配置客户端。这里以QQ邮箱为例

//引入模块
var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
    service:'qq',
    auth:{
        user:'xxxxxxx@qq.com',
        pass:'xxxxxxxxxxx'  //这里的pass不是你的QQ邮箱登录密码,而是第三方授权码
    }
});
//定义服务器宕机和恢复时要发送的邮件格式
var errorOptions = {
    from: 'xxxxxxx@qq.com',
    to: 'xxxxxxx@163.com',
    subject:'工程挂掉了',
    text: '工程挂掉了,请尽快修复'
}
var restartOptions = {
    from: 'xxxxxxx@qq.com',
    to: 'xxxxxxxx@163.com',
    subject:'工程恢复',
    text:'服务器已恢复'
}

更多配置请参考nodemailer文档

现在我们要在上面http模块的基础上添加发送邮件功能了

var addcheck = true;//定义一个开关
http.request(options,function(){
    if(!addcheck){
            //发送邮件的代码
            transporter.sendMail(restartOptions,function(){
                    //回调函数
            })
            addcheck = true;
    }
})
//当请求网站返回错误,也就是网站不可访问时的处理代码
http.on('error',function(){
      if(addcheck){
            transporter.sendMail(errorOptions,function(){
                    //回调函数
            });
            addcheck = false;
      }
})

上面代码的意思是首先定义开关,然后用http去监听我们配置好的服务器设置,如果error,同时addcheck为true时,调用nodemailer发送宕机邮件,同时addcheck为false.
如果监听恢复正常,同时addcheck为false(也就是说当前服务器已经宕机一次),则发送恢复邮件通知服务器已经正常。同时addcheck为true.

短信服务

短信接口我们调用阿里大于的nodejs短信接口,alidayu-node模块简介
首先我们登陆阿里大于,申请应用,拿到App Key和 App Secret以及相关的接口。

App key和App Secret


Paste_Image.png

短信签名


Paste_Image.png

短信通知模板ID


Paste_Image.png

上面我们已经安装了alidayu-node模块,直接引入

var App = require('alidayu-node');
var app = new App('App Key','App Secret');//这里的App Key和App Secret 就是我们上面拿到的

app.smsSend({
        sms_free_sign_name: '通知',//这里就是上面的签名
        sms_param: {"code": "123456", "product": "测试网站"},//这里是短信模板变量,可选
        rec_num: '13599999999',//要发送的手机号,可以有多个
        sms_template_code: 'SMS_640004'//短信模板ID
})

OK,将我们上面写好的短信通知代码段放到http代码段下,同时我们使用setInterval去重复调用

var timer = setInterval(function(){
    var req = http.request(options,function(res){
                if(!addCheck){
                    transporter.sendMail(restartOption,function(err,res){
                        if(err){
                            console.log(err);
                        }
                        else{
                            console.log(req.messageId);
                        }
                        addCheck = true;
                    })
                }
                console.log(res.statusCode);
            })

    req.on('error',function(err){
                if(addCheck){
                    transporter.sendMail(errorOptions,function(){
                        console.log(new Date() + '工程挂掉了');
                    });
                    app.smsSend({
                            sms_free_sign_name:'通知',
                            rec_num:'13999999999',
                            sms_template_code:'SMS_42675072'
                        },function(err,res){
                         //回调,可选,我这里方便调试加了回调
                            if(err){
                                console.log(err);
                            }
                            else{
                                console.log(res);
                            }
                        });
                    addCheck = false;
                }
            })

    req.end();
},60000);

然后在shell中启动,测试代码是否能正常工作

node app.js

如果我们部署在服务器上,关掉终端那么服务也就停止了,这里我们可以使用PM2进程管理软件来不间断启动服务。关于PM2的介绍

参考

通过阿里大鱼平台用nodejs发短信
史上最“脑残”的“抢火车票”程序(node.js版)

正文结束,第一次在简书写文章,心情有点小激动(hiahia)。文章若有错误之处,欢迎指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,221评论 0 6
  • 2017.7.25---8.3日,跟着一群孩子和他们的导师,北游鄂尔多斯,借名庄子外篇曰知北游。路途杂记,...
    圣诞来了天使阅读 1,908评论 8 19
  • 我的父亲 @黄开兵 一说起自己的父亲,很多人都会想到这些词:慈祥,严肃,憨厚,一家之主,顶梁柱……而对于我来说,都...
    黄开兵阅读 928评论 5 13
  • 最近读了本有趣的书,台湾作家骆以军的《小儿子》。作家有两个性格迥异的儿子,而书名“小儿子”并不是单指第二个儿子,英...
    加加妈妈阅读 807评论 1 4