2017-10-13 32 views
-4

私は、ノード3000をポート3000で実行して、api要求を処理しています。apiルートがhttpsで動作しない

これが正常に動作します...

http://www.skoolaide.com:3000/api/accounts

これはそうではありません。

https://www.skoolaide.com:3000/api/accounts

誰かが理由を教えてもらえますか? https://www.skoolaide.comに行くと、ssl certが正しく設定されていますが、ノード側で何かする必要がありますか?

これは私のサーバーjsファイルです。ご注意:私だけがHTTPS経由ミドルウェアにアクセスすることはできません何らかの理由でポート3000上のミドルウェア(API)を実行します...

'use strict'; 
var express = require('express'); 
var router = express.Router(); 
var app = express(); 
var http = require('http'); 
var open = require('open'); 
var cors = require('cors'); 
var path = require('path'); 
var morgan = require('morgan'); 
var errorhandler = require('errorhandler'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var config = require('./config/config'); 
var jwt = require('jsonwebtoken'); 
var compression = require('compression'); 
var runMiddleware = require('run-middleware')(app); 
var fs = require('fs'); 
var readline = require('readline'); 
var google = require('googleapis'); 
var googleAuth = require('google-auth-library'); 
var multer = require('multer'); 
var node_xj = require("xls-to-json"); 
var moment = require('moment'); 
var async = require('async'); 
var btoa = require('btoa'); 
var sharp = require('sharp'); 
var students = require("./middleware/students.api"); 
var accounts = require("./middleware/accounts.api"); 
var messages = require("./middleware/messages.api"); 
var advocates = require("./middleware/advocates.api"); 
var authenticate = require("./middleware/authenticate.api"); 
var email = require("./middleware/email.api"); 
var text = require("./middleware/text.api"); 
var colleges = require("./middleware/colleges.api"); 
var amazon = require("./middleware/amazon.api"); 
var rewards = require("./middleware/rewards.api"); 
var files = require("./middleware/files.api"); 
var validations = require("./middleware/validations.api"); 
var points = require("./middleware/points.api"); 
var notifications = require("./middleware/notifications.api"); 
var notificationsMap = require("./middleware/notificationsMap.api"); 
var trivia = require("./middleware/trivia.api"); 
var tasks = require("./middleware/rewardgoals.api"); 
var classes = require("./middleware/classes.api"); 
var connections = require("./middleware/connections.api"); 
var badges = require("./middleware/badges.api"); 
var fixpasswords = require("./middleware/fixpasswords.api"); 
var Files = require('./models/files'); 




mongoose.connect(config.database); 

process.on('SIGINT', function() { 
    mongoose.connection.close(function() { 
    console.log('Mongoose disconnected on app termination'); 
    process.exit(0); 
    }); 
}); 


// use body parser so we can get info from POST and/or URL parameters 
app.use(bodyParser.json({ 
    limit: '50mb' 
})); 
app.use(bodyParser.urlencoded({ 
    limit: '50mb', 
    extended: true 
})); 

app.set('uploads', path.join(__dirname, 'uploads')); 
app.get("/uploads/*", function (req, res, next) { 
    res.sendFile(__dirname + req.url); 
}); 
var whitelist = ['https://www.skoolaide.com', 'https://skoolaide.com']; 
var corsOptionsDelegate = function (req, callback) { 
    var corsOptions; 
    if (whitelist.indexOf(req.headers['origin']) !== -1) { 
    corsOptions = { origin: true, credentials: true } // reflect (enable) the requested origin in the CORS response 
    } else { 
    corsOptions = { origin: false, credentials: false } // disable CORS for this request 
    } 
    callback(null, corsOptions) // callback expects two parameters: error and options 
} 
app.use(cors(corsOptionsDelegate)); 
//this is used because the body parser removes undefined values from the database. 
app.set('json replacer', function (key, value) { 
    // undefined values are set to `null` 
    if (typeof value === "undefined") { 
    return null; 
    } 
    return value; 
}); 


app.use(multer({ 
    dest: './uploads/', 
    rename: function (fieldname, filename) { 
    return filename.replace(/\W+/g, '-').toLowerCase() + Date.now() 
    }, 
    onFileUploadStart: function (file) { 
    //console.log(file.fieldname + ' is starting ...') 
    }, 
    onFileUploadData: function (file, data) { 
    //console.log(data.length + ' of ' + file.fieldname + ' arrived') 
    }, 
    onFileUploadComplete: function (file) { 
    //console.log(file.fieldname + ' uploaded to ' + file.path) 
    } 
}).any()); 

// "files" should be the same name as what's coming from the field name on the client side. 
app.post("/api/upload", function (req, res) { 
    //console.log(req.files[0].mimetype) 


    fs.readFile(req.files[0].path, function (err, data) { 

    var newPath = __dirname + "/uploads/" + req.headers["account_id"] + '_' + moment().format('MM_DD_YYYY_HH-mm-ss') + '_' + req.files[0].originalname.replace(/[^a-zA-Z0-9.]/g, '_'); 
     var readPath = "/uploads/" + req.headers["account_id"] + '_' + moment().format('MM_DD_YYYY_HH-mm-ss') + '_' + req.files[0].originalname.replace(/[^a-zA-Z0-9.]/g, '_'); 


    if(req.files[0].mimetype.indexOf('image') > -1){ 
      sharp(data) 
      .rotate() 
      .resize(800, 800) 
      .max() 
      .toFile(newPath, function(err, info){ 

       var file = new Files(); 
       file.owner = req.headers.account_id || null;  
       file.classId = req.body.classId || null; 
       file.rewardGoalId = req.body.rewardGoalId || null; 
       file.avatarId = req.body.avatarId || null; 
       file.mimeType = req.files[0].mimetype || null; 
       file.originalName = req.files[0].originalname || null; 
       file.path = readPath; 

       file.save(function (err, newFile) { 
        if (err) { 
         res.send(err); 
        } else { 
         res.send({ success: true, data: newFile }).end(); 
        } 
       });  
      }); 
    } else{ 
     //not an image file... 

     var newPath = __dirname + "/uploads/" + req.headers["account_id"] + '_' + moment().format('MM_DD_YYYY_HH-mm-ss') + '_' + req.files[0].originalname.replace(/[^a-zA-Z0-9.]/g, '_'); 
     //console.log('Writing file: ', newPath); 
    fs.writeFile(newPath, data, function (err) { 


     var readPath = "/uploads/" + req.headers["account_id"] + '_' + moment().format('MM_DD_YYYY_HH-mm-ss') + '_' + req.files[0].originalname.replace(/[^a-zA-Z0-9.]/g, '_'); 
     //console.log(readPath) 

     var file = new Files(); 
     file.owner = req.headers.account_id || null;  
     file.classId = req.body.classId || null; 
     file.rewardGoalId = req.body.rewardGoalId || null; 
     file.profileId = req.body.profileId || null; 
     file.mimeType = req.files[0].mimetype || null; 
     file.originalName = req.files[0].originalname || null; 
     file.path = readPath; 

     file.save(function (err, newFile) { 
      if (err) { 
       res.send(err); 
      } else { 
       res.send({ success: true, data: newFile }).end(); 
      } 
     });  
    }); 





    } 
    }); 
    }); 

app.use(express.static('www')) 
var a = ['/']; 
//all get requests resolve to index. 
app.get(a, function (req, res) { 
    console.log('This is a test', req.originalUrl, req.url); 
    res.setHeader('Cache-Control', 'private, no-cache, no-store, must-revalidate'); 
    res.setHeader('Expires', '-1'); 
    res.setHeader('Pragma', 'no-cache'); 
    res.setHeader('X-UA-Compatible', 'IE=Edge,chrome=1'); 
    res.setHeader('Judson', 'Rocks!'); 
    if (req.originalUrl == '/') { 
    res.sendFile('www/index.html', {root: __dirname}); 
    } 
}); 

app.set("superSecret", config.secret) 


//var upload = require("./middleware/upload.api"); 

app.use('/api', router); 
app.use('/api/students', students); 
app.use('/api/accounts', accounts); 
app.use('/api/messages', messages); 
app.use('/api/advocates', advocates); 
app.use('/api/authenticate', authenticate); 
app.use('/api/email', email); 
app.use('/api/text', text); 
app.use('/api/colleges', colleges); 
app.use('/api/amazon', amazon); 
app.use('/api/rewards', rewards); 
app.use('/api/files', files); 
app.use('/api/validate', validations); 
app.use('/api/points', points); 
app.use('/api/notifications', notifications); 
app.use('/api/notificationsMap', notificationsMap); 
app.use('/api/trivia', trivia); 
app.use('/api/rewardgoals', tasks); 
app.use('/api/classes', classes); 
app.use('/api/badges', badges); 
app.use('/api/connections', connections); 
app.use('/api/fixpasswords', fixpasswords); 


/**SERVER*************************************/ 
// all environments 
app.set('port', process.env.PORT || 3000); 
app.engine('html', require('ejs').renderFile); 
// express/connect middleware 
app.use(morgan('dev')); 




app.use(compression()); //use compression 

// development only 
if ('development' === app.get('env')) { 
    app.use(errorhandler()); 
} 

/**END SERVER*************************************/ 

var cluster = require('cluster'); 

if (cluster.isMaster) { 
    var numWorkers = require('os').cpus().length; 

    console.log('Master cluster setting up ' + numWorkers + ' workers...'); 

    for (var i = 0; i < numWorkers; i++) { 
    cluster.fork(); 
    } 

    cluster.on('online', function (worker) { 
    console.log('Worker ' + worker.process.pid + ' is online'); 
    }); 

    cluster.on('exit', function (worker, code, signal) { 
    console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal); 
    console.log('Starting a new worker'); 
    cluster.fork(); 
    }); 
} else { 

    app.listen(app.get('port'), 
    function() { 
     console.log('myApp server listening on port ' + app.get('port')); 
    }); 

} 
+0

あなたはノードコードを表示する必要があります。それ以外の場合は野生のものです。たぶん、2つの異なるアプリが導入されているかもしれません。また、HTTPとHTTPSを同じポートにどのように持っていますか?あなたは本当にHTTPで80、HTTPSで443を実行しているはずです。 – tadman

+0

真剣に、あなたのコードを表示せずに私たちがあなたを助けることを期待する方法は?同じポート上でhttpサーバーとhttpsサーバーの両方を実行することはできません。それぞれには独自のポートが必要です。だから、ポート3000は、どちらか一方であり、両方ではありません。 – jfriend00

+0

apiでhttpsサーバを実行していますか?すなわち、コード内に 'https.createServer()'のようなものがありますか?もしそうなら、それはどんなポートで聞いていますか? –

答えて

0

あなたのコードは、HTTPサーバを起動しています。この行:

app.listen(app.get('port')) 

httpサーバだけを起動します。 HTTPSのサポートが必要な場合は、HTTPSサーバーも起動し、別のポートで起動する必要があります。 express doc for app.listen()はどのようにそれを行う方法を示しますし、それはこのようにbasicalyだ:optionsは、あなたのSSL証明書が含まれており、

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

http.createServer(app).listen(80); 
https.createServer(options, app).listen(443); 

あなたは、HTTPサーバーとHTTPSサーバのための必要なポート番号を記入ところ。

httpとhttpsサーバーの両方にアクセスするためにブラウザーにポート番号が必要ないと思われる場合は、ブラウザーがデフォルトのポート番号を入力するためです。 http URLを入力するだけで、ポート80が使用されます。ポートのないhttps URLを入力すると、ポート443が使用されます。これら2つの特定のポートに接続していない場合は、ブラウザのURL 。どちらの場合でも、httpとhttpsの両方のために別々のポートに別々のサーバーが必要です。

0

var https = require( "https"); not

Var http = require( "http");

関連する問題