2016-08-14 3 views
0

ノード、Express 4、MongoDBをOpenshiftで使用してREST APIの開始を設定しました。私はそれを動作させることなく、さまざまな設定とセットアップを試みました。今、私のメインserver.jsは次のようになります。オープンモンゴ、ノード、エクスプレス4でRESTを開きます。応答していない

var AppContainer = function() { 
    // Scope. 
    var self = this; 
    /* ================================================================ */ 
    /* Helper functions.             */ 
    /* ================================================================ */ 

    /** 
    * Set up server IP address and port # using env variables/defaults. 
    */ 
    self.setupVariables = function() { 
    // Set the environment variables we need. 
    self.ipaddress = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"; 
    self.port = process.env.OPENSHIFT_NODEJS_PORT || 3000; 

    }; 

    /** 
    * terminator === the termination handler 
    * Terminate server on receipt of the specified signal. 
    * @param {string} sig Signal to terminate on. 
    */ 
    self.terminator = function (sig) { 
    if (typeof sig === "string") { 
     console.log('%s: Received %s - terminating sample app ...', 
     Date(Date.now()), sig); 
     process.exit(1); 
    } 
    console.log('%s: Node server stopped.', Date(Date.now())); 
    }; 


    /** 
    * Setup termination handlers (for exit and a list of signals). 
    */ 
    self.setupTerminationHandlers = function() { 
    // Process on exit and signals. 
    process.on('exit', function() { 
     self.terminator(); 
    }); 

    // Removed 'SIGPIPE' from the list - bugz 852598. 
    ['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT', 
     'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGTERM' 
    ].forEach(function (element, index, array) { 
     process.on(element, function() { 
      self.terminator(element); 
     }); 
     }); 
    }; 

    /** 
    * Initializes the sample application. 
    */ 
    self.initialize = function() { 
    self.setupVariables(); 
    self.setupTerminationHandlers(); 
    }; 


    self.setupServer = function() { 

    /** 
    * Module dependencies. 
    */ 
    var app = require('./app'); 
    var http = require('http'); 
    /** 
    * Get port from environment and store in Express. 
    */ 
    // var port = normalizePort(self.port); 
    /** 
    * Create HTTP server. 
    */ 
    var server = http.createServer(app); 
    /** 
    * Listen on provided port, on all network interfaces. 
    */ 
    server.listen(self.port, self.ipaddress, function() { 
     console.log('%s: Node server started on %s:%d ...', 
     Date(Date.now()), self.ipaddress, self.port); 
    }); 
    server.on('error', onError); 
    server.on('listening', onListening); 



    /** 
    * Event listener for HTTP server "error" event. 
    */ 

    function onError(error) { 
     if (error.syscall !== 'listen') { 
     throw error; 
     } 

     var bind = typeof port === 'string' 
     ? 'Pipe ' + port 
     : 'Port ' + port; 

     // handle specific listen errors with friendly messages 
     switch (error.code) { 
     case 'EACCES': 
      console.error(bind + ' requires elevated privileges'); 
      process.exit(1); 
      break; 
     case 'EADDRINUSE': 
      console.error(bind + ' is already in use'); 
      process.exit(1); 
      break; 
     default: 
      throw error; 
     } 
    } 

    /** 
    * Event listener for HTTP server "listening" event. 
    */ 

    function onListening() { 
     var addr = server.address(); 
     console.log('Server on port : ' + addr.port); 
    } 
    }; 
}; 


    var zapp = new AppContainer(); 
    zapp.initialize(); 
    zapp.setupServer(); 

と私のapp.jsは次のようになります。

const http   = require('http'), 
     fs   = require('fs'), 
     path   = require('path'), 
     contentTypes = require('./utils/content-types'), 
     sysInfo  = require('./utils/sys-info'), 
     env   = process.env, 
     v1Route = require('./src/resources/v1/v1Route'), 
     MongoClient = require('mongodb').MongoClient; 

     var express = require('express'); 
     var app = express(); 


     var connection_string = '127.0.0.1:27017/datecal'; 
     // if OPENSHIFT env variables are present, use the available connection info: 
     if(process.env.OPENSHIFT_MONGODB_DB_PASSWORD){ 
     connection_string = process.env.OPENSHIFT_MONGODB_DB_USERNAME + ":" + 
     process.env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + 
     process.env.OPENSHIFT_MONGODB_DB_HOST + ':' + 
     process.env.OPENSHIFT_MONGODB_DB_PORT + '/' + 
     process.env.OPENSHIFT_APP_NAME; 
     } 

     var mongoUrl = 'mongodb://' + connection_string 

     MongoClient.connect(mongoUrl, function (err, db) { 
     if (err) { 
      console.log("Unable to connect to the mongoDB server. Error:", err); 
     } else { 
      //HURRAY!! We are connected. :) 
      console.log("Connection established to Mongo DB with connection string " + connection_string); 

      app.use('/v1', function(req, res, next){ 
      req.db = db; 
      console.log("DB now available for all routes"); 
      next(); 
      }); 

      app.use('/v1', v1Route); 

      // let port = process.env.OPENSHIFT_NODEJS_PORT || 3000; 
      // var ipaddress = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"; 
      // app.listen(port, ipaddress, function(){ 
      // console.log('Server is now listening to port ' + port + ' on ip ' + ipaddress); 
      // }); 

     } 
     }); 

     module.exports = app; 

問題がコミットすると実行しているとき、それは私のローカル環境ではうまく動作しますが、ということですopenshiftで私はサーバーが応答しないことを得る。 OPENSHIFT_NODEJS_PORTは8080です。これでserver.jsに自分のサーバーをセットアップしました。

また、app.jsの最後にコメント欄を使用してみました。私のセットアップで考慮していないオープンシフト環境や、何が間違っていますか?

答えて

0

数時間のグーグルで、私は最終的に解決策を見つけました。それは私が使用しているロードバランサ(Haproxy)がルートパスを "keep alive"として使用していることが判明しました.-urlと私はそのリクエストパスには対応していませんでした。私の解決策は、単に "このAPIです"のようなテキスト文字列でそのパス上のリクエストに応答することでした。将来、私はおそらくルートパス上にAPIドキュメントを持っています。

関連する問題