2014-04-19 12 views
11

Im ghi máy chủ web nút đầu tiên của tôi (cảm thấy tự do để cho tôi phản hồi) sử dụng Express và Gith để triển khai. Vấn đề là tôi nhận được lỗi dưới đây khi triển khai và nếu tôi chạy tập lệnh qua pm2 thì quá trình này dường như bị xóa. Bất kỳ ý tưởng? Kịch bản được đính kèm bên dưới.Máy chủ tốc hành: Lỗi: Phạm vi yêu cầu không thỏa mãn

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 = /^(([^<>()[\]\\.,;:\[email protected]\']+(\.[^<>()[\]\\.,;:\[email protected]\']+)*)|(\'.+\'))@((\[[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(); 
+0

Tôi không chắc chắn những gì xảy ra nhưng nó hoạt động khi tôi phá vỡ dụ hai máy chủ hoặc các chức năng ra cùng một tập tin. Bây giờ tôi có hai tập tin/máy chủ trường hợp làm việc trên các cổng khác nhau trên máy chủ – gazzwi86

+0

Tôi có một ứng dụng Express đơn giản đâm vào lỗi này. – Randomblue

+0

Bạn có thể đăng nguồn lên github hoặc ở đâu đó không? Tôi muốn nguồn đầy đủ để tái sản xuất. – Vinnyq12

Trả lời

1

nên không sử dụng require('https')? Cũng điều tra express.static ...

1

Có vẻ như lỗi sắp ra khỏi tập lệnh deploy.sh của bạn.

Để khắc phục điều này, hãy đảm bảo rằng các yêu cầu gửi đi không có Content-Range.

Cũng có thể giúp đăng deploy.sh

0

Hãy thử gửi acceptRanges: false làm đối số cho phương thức res.sendFile.

Vì vậy, thay vì gọi res.sendFile(filePath) sử dụng res.sendFile(filePath, {acceptRanges: false})

Các vấn đề liên quan