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:'[email protected]',
        pass:'xxxxxxxxxxx'  //这里的pass不是你的QQ邮箱登录密码,而是第三方授权码
    }
});
//定义服务器宕机和恢复时要发送的邮件格式
var errorOptions = {
    from: '[email protected]',
    to: '[email protected]',
    subject:'工程挂掉了',
    text: '工程挂掉了,请尽快修复'
}
var restartOptions = {
    from: '[email protected]',
    to: '[email protected]',
    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


Nodejs写一个简单的监听服务器程序_第1张图片
Paste_Image.png

短信签名


Nodejs写一个简单的监听服务器程序_第2张图片
Paste_Image.png

短信通知模板ID


Nodejs写一个简单的监听服务器程序_第3张图片
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)。文章若有错误之处,欢迎指正。

你可能感兴趣的:(Nodejs写一个简单的监听服务器程序)