2017-10-13 2 views
-4

Ich habe einen Knoten-Server auf Port 3000 ausgeführt, um API-Anfrage zu dienen.api Route funktioniert nicht über https

das funktioniert gut ...

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

dies nicht der Fall.

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

Kann mir jemand sagen, warum? Wenn Sie zu https://www.skoolaide.com gehen, ist das SSL-Zertifikat korrekt konfiguriert, aber muss ich etwas auf der Knotenseite tun?

das ist mein Server js-Datei. Bitte beachten Sie: Ist läuft nur die Middleware (api) auf Port 3000. Aus irgendeinem Grund kann ich nicht die Middleware Zugriff über https ...

'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

Sie müssen Ihren Node-Code zeigen, sonst ist es nur eine wilde Vermutung. Vielleicht haben Sie zwei verschiedene Apps im Einsatz, eine mit der Route, eine ohne? Wie haben Sie HTTP und HTTPS auf dem gleichen Port? Sie sollten wirklich HTTP auf 80, HTTPS auf 443 laufen lassen. – tadman

+0

Ernsthaft, wie Sie erwarten, dass wir Ihnen helfen, ohne Ihren Code zu zeigen? Sie können auf dem gleichen Port nicht sowohl einen http-Server als auch einen https-Server ausführen. Jeder würde seinen eigenen Port benötigen. Port 3000 wird also der eine oder der andere sein, nicht beides. – jfriend00

+0

Führen Sie einen HTTPS-Server auf Ihrer API aus? h. haben Sie etwas wie 'https.createServer()' in Ihrem Code? Und wenn ja, welcher Port hört es auf? –

Antwort

0

Ihr Code startet nur einen HTTP-Server. Diese Zeile:

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

startet nur einen http-Server. Wenn Sie Unterstützung für HTTPS benötigen, müssen Sie auch einen HTTPS-Server starten, und Sie müssen ihn an einem anderen Port starten. Die express doc for app.listen() zeigt Ihnen, wie das zu tun, und es ist im Grunde wie folgt aus:

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); 

wo options enthält Ihre SSL-Zertifikate und wo Sie in den gewünschten Portnummern für Ihren HTTP-Server und Ihrem https-Server zu füllen.

Wenn Sie unter der Illusion arbeiten, dass Sie im Browser keine Portnummer benötigen, um sowohl auf einen HTTP- als auch auf einen HTTPS-Server zuzugreifen, füllt der Browser eine Standardportnummer für Sie aus. Wenn Sie nur eine HTTP-URL eingeben, wird Port 80 verwendet. Wenn Sie eine HTTPS-URL ohne Port eingeben, wird der Port 443 verwendet. Wenn Sie sich nicht an diesen beiden spezifischen Ports befinden, müssen Sie den gewünschten Port in der Browser-URL angeben . In beiden Fällen benötigen Sie einen separaten Server für HTTP und HTTPS.

0

Verwenden Sie var https = require ("https"); nicht

Var http = require ("http");