gaz*_*i86 13 javascript deployment node.js express
我正在编写我的第一个节点Web服务器(随意给我反馈),使用express和gith进行部署.问题是我在部署后收到以下错误,如果我通过pm2运行脚本,那么该过程似乎被删除了.有任何想法吗?该脚本附在下面.
sudo node server.js 
Error: Requested Range Not Satisfiable
    at SendStream.error (/home/gareth/node_modules/express/node_modules/send/lib/send.js:145:16)
    at SendStream.send (/home/gareth/node_modules/express/node_modules/send/lib/send.js:371:19)
    at /home/gareth/node_modules/express/node_modules/send/lib/send.js:323:10
    at /home/gareth/node_modules/newrelic/node_modules/continuation-local-storage/node_modules/async-listener/glue.js:177:31
    at Object.oncomplete (fs.js:107:15)
Completed deployment
Server.js
/*
    Webserver
        Should use port 80 on production
        Mongo DB for database - http://docs.mongodb.org/manual/tutorial/
        Use pm2 to ensure it runs forever and load balanced
    NPM
        https://www.npmjs.org/package/fs
        https://www.npmjs.org/package/express
        https://www.npmjs.org/package/body-parser
        https://www.npmjs.org/package/gith
        https://www.npmjs.org/package/nodemailer
*/
// server monitoring
require('newrelic');
var APP = {
    // include some scripts
    express: require('express'),
    fs: require('fs'),
    mdb: require('mongodb'),
    nodemailer: require('nodemailer'),
    gith: require('gith').create(9001),
    execFile: require('child_process').execFile,
    // setup
    port: 80,
    dbUrl: 'mongodb://127.0.0.1:27017/test',
    gitRepo: '*****',
    gmailUser: '*****',
    gmailPass: '******',
    email: '*****',
    subject: 'Website enquiry',
    linuxUser: '*****',
    wwwPath: '/var/www/',
    // vars
    server: null,
    app: null,
    options: {},
    smtpTransport: null,
    db: null,
    init: function (){
        // setup express
        APP.app = APP.express().use(require('body-parser')());
        // create the server
        APP.fs.exists('./ssl/privatekey.pem', function (e){
            if(e){
                APP.fs.exists('./ssl/certificate.pem', function (e){
                    if(e){
                        APP.options = {
                            key: APP.fs.readFileSync('./ssl/privatekey.pem'),
                            cert: APP.fs.readFileSync('./ssl/certificate.pem'),
                        };
                        APP.server = require('http').createServer(APP.options, APP.app).listen(APP.port, '0.0.0.0');
                    } else {
                        APP.server = require('http').createServer(APP.app).listen(APP.port, '0.0.0.0');
                    }
                });
            } else {
                APP.server = require('http').createServer(APP.app).listen(APP.port, '0.0.0.0');
            }
        });
        // set up smtp
        APP.smtpTransport = APP.nodemailer.createTransport('Gmail',{
            auth: {
                user: APP.gmailUser,
                pass: APP.gmailPass,
            }
        });
        // http routing
        APP.routing();
        // wait for github push
        APP.gith({
            repo: APP.gitRepo
        }).on('all', function(payload){
            if(payload.branch === 'master' && payload.original.commits[0].message.indexOf('#deploy') >= 0){
                APP.execFile('/home/'+APP.linuxUser+'/deploy.sh', function(err, stdout, stderr) {
                    console.log('Completed deployment');
                });
            }
        });
    },
    // open the db
    openDB: function (){
        APP.mdb.connect(APP.dbURL, function(err, db){
            if(err)
                throw err;
            APP.db = db;
        });
    },
    // close the db
    closeDB: function (){
        APP.db.close();
    },
    // insert a file to the db
    create: function (col, data){
        // open the db
        APP.openDB();
        var collection = APP.db.collection(col);
        collection.insert(data, function(err, docs){
            if(err){
                console.warn(err.message);
            } else {
                console.log('Successfully inserted record');
            }
        });
        // close the db
        APP.closeDB();
    },
    // insert a file to the db
    update: function (col, crit, data){
        // open the db
        APP.openDB();
        // example criteria
        // {key: value} // get something specific
        // {key: {$lt: value}} // Less Than
        // {key: {$gte: value}} // Greater than or equal to
        // {key: {$ne: 'value'}} // Not Equal To
        // {key: {$in: ['value', 'value', 'value']}} // Exists in array
        // updateoperators
        //   db.col.update({key: 'value'}, {$addToSet: {key: ['value']}});
        // Or we can add a new field to Cash
        //   db.col.update({key: 'value'}, {$set: {'age': 50} });
        // You can also push and pull items from arrays:
        //   db.col.update({key: 'value'}, {$push: {'key': 'value'} });
        //   db.col.update({key: 'value'}, {$pull: {'key': 'value'} });
        var collection = APP.db.collection(col);
        collection.update(crit, data, function (){
            if(err){
                console.warn(err.message);
            } else {
                console.log('Successfully updated record');
            }
        });
        // close the db
        APP.closeDB();
    },
    // find all in the db collection that match
    read: function (col, crit){
        // open the db
        APP.openDB();
        // example criteria
        // {key: value} // get something specific
        // {key: {$lt: 5}} // Less Than
        // {key: {$gte: 10}} // Greater than or equal to
        // {key: {$ne: 'b'}} // Not Equal To
        // {key: {$in: ['a', 'b', 'c']}} // Exists in array
        var collection = APP.db.collection(col);
        collection.find(crit).toArray(function(err, results) {
            if(err){
                console.warn(err.message);
            } else {
                console.log(results);
            }
        });
        // close the db
        APP.closeDB();
    },
    // find and delete from collection
    delete: function (col, crit){
        // open the db
        APP.openDB();
        // example criteria
        // {key: value} // get something specific
        // {key: {$lt: 5}} // Less Than
        // {key: {$gte: 10}} // Greater than or equal to
        // {key: {$ne: 'b'}} // Not Equal To
        // {key: {$in: ['a', 'b', 'c']}} // Exists in array
        var collection = APP.db.collection(col);
        collection.remove(crit);
        // close the db
        APP.closeDB();
    },
    // routing files
    routing: function (){
        // hide the engine creating the server
        APP.app.disable('x-powered-by');
        // index page
        APP.app.get('/*', function (req, res, next){
            APP.renderPage(req, res, next);
        });
        // handle post data
        APP.app.post('/', function(req, res, next) {
            APP.sendEmail(req);
            APP.renderPage(req, res, next);
        });
        APP.app.post('/index.html', function(req, res, next) {
            APP.sendEmail(req);
            APP.renderPage(req, res, next);
        });
    },
    // render page
    renderPage: function (req, res, next){
        // get the host and point to correct folder
        var host = req.get('host');
        if(host.indexOf('www.') >= 0){
            host = host.replace('www.', '');
        }
        // see if we are on staging
        if(host.indexOf('staging.') >= 0){
            // tidy url
            host = host.replace('staging.', '');
            var url = APP.wwwPath + host + '/app';
            APP.fs.exists(url + req.url, function (e){
                if(e){
                    res.sendfile(url + req.url);
                } else {
                    res.sendfile(url + '/404.html');
                }
            });
        } else {
            var url = APP.wwwPath + host + '/dist';
            APP.fs.exists(url + req.url, function (e){
                if(e){
                    res.sendfile(url + req.url);
                } else {
                    res.sendfile(url + '/404.html');
                }
            });
        }
    },
    // sanitize post
    sendEmail: function (req){
        var name = req.body.name,
        email = req.body.email,
        msg = req.body.msg,
        nameRegex = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/,
        emailRegex = /^(([^<>()[\]\\.,;:\s@\']+(\.[^<>()[\]\\.,;:\s@\']+)*)|(\'.+\'))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        if(emailRegex.test(email) && nameRegex.test(name) && msg.length > 10){
            // setup e-mail data with unicode symbols
            var mailOptions = {
                from: name + ' <' + email + '>',
                to: APP.email,
                subject: APP.subject,
                text: msg,
                html: '<p>'+ msg +'</p>'
            }
            // send mail with defined transport object
            APP.smtpTransport.sendMail(mailOptions, function(error, response){
                if(error){
                    console.log(error);
                }else{
                    console.log('Message sent: ' + response.message);
                }
                // shut down the connection pool - no more messages
                //smtpTransport.close();
            });
        }
    }
};
// run the script
APP.init();
| 归档时间: | 
 | 
| 查看次数: | 2806 次 | 
| 最近记录: |