2017-01-24 3 views
1

Ich führe eine universelle Javascript-Anwendung auf Heroku.Express.js net :: ERR_CONNECTION_CLOSED

Meine Vue.js App wird von Express.js geladen und Anfragen werden an https://localhost:3000/api weitergeleitet.

Ich versuche, eine einfache POST-Anforderung an einen Endpunkt zu machen, aber die Konsole auf Chrome ausdruckt:

OPTIONS https://localhost:3000/api net::ERR_CONNECTION_CLOSED

Hier ist mein ausdrücklicher Server:

import express from 'express' 
import cors from 'cors' 
import bodyParser from 'body-parser' 
import path from 'path' 
import mongoose from 'mongoose' 
import routes from './routes' 

mongoose.connect('mongodb://coolAddress'); 
var db = mongoose.connection; 
db.on('error', console.error.bind(console, 'connection error:')); 
db.once('open',() => { 
    console.log("mongoose connected") 
}) 

const app = express() 

const port = 3000 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cors()) 
app.use(express.static(path.resolve(__dirname, '../coolClient/dist'))); 

app.use('/api', routes) 

app.all('*', (req, res) => { 
    res.sendFile(path.resolve(__dirname, '../coolClient/dist', 'index.html')); 
}) 

app.listen(process.env.PORT || port,() => { 
    console.log(`App listening on ${process.env.PORT || port}`) 
}) 

ich vermute, dass diese kann mit der SSL-Konfiguration zu tun haben. Das Googeln des Problems bringt diese Möglichkeit auf, bietet jedoch keine Möglichkeit, es zu debuggen.

Irgendwelche Ideen?

+0

Zeigen Sie etwas Code, wenn Sie Hilfe wünschen, insbesondere Ihre ausdrückliche App-Setup. – Paul

+0

@Paul ok bearbeitet. Irgendwelche Ideen, wie das zu beheben ist? – softcode

+0

Ich bin immer noch nicht ganz klar in Ihrer Architektur. Ihre App ist auf Heroku oder auf Localhost? – Paul

Antwort

0

Ok, so aus den Kommentaren, ein paar Dinge zu sehen.

1) "localhost" bedeutet Ihren Computer. Wenn Ihr Client-Code versucht, diesen zu treffen, wird ein Server benötigt, der auf Ihrem Rechner läuft und Ihren serverseitigen Code bereitstellt. Sie müssen unbedingt einen Web-zugänglichen Domain-Namen haben (wie den, den Ihnen heroku zur Verfügung stellte: app-name.herokuapp.com), um Ihren serverseitigen Code zu treffen, wenn dieser auf Heroku (oder einem anderen Web-Host) gehostet wird.

2) Wenn Sie HTTPS verwenden möchten, müssen Sie ein SSL-Zertifikat kaufen und installieren. Es wird nicht für die Herokuapp-Domain sein, also müssen Sie auch einen Domain-Namen kaufen und das für sich selbst einrichten. All das ist auf der Heroku-Dokumentation erklärt: https://devcenter.heroku.com/articles/ssl-endpoint

Hoffe, dass hilft.

+1

Ja, ich habe gerade die Relativität von localhost völlig falsch verstanden. Völlig umwerfend atm. Danke für die Information. – softcode

+0

Es ist alles gut, @softcode, wir waren alle dort. :) – Paul

+0

:) Kann ich etwas von deiner Weisheit für ein anderes Problem ernten, das ich habe? http://StackOverflow.com/questions/41843836/express-js-route-execution-order-with-catch-all @Paul – softcode

0

ich herausgefunden und ssl-Anfragen arbeiten wie ein Zauber auf meinem Centos6.9

  • Virtualmin auf Ihrem Server installieren
  • Setup können encrypt
  • beziehen sich nur

vor Ihrem Anruf zu
var app = express();
oder andere http (s) -Mechanismus oder app.listen(port),

var options = { 
    key: fs.readFileSync('/home/yourdomain/ssl.key'), 
    cert: fs.readFileSync('/home/domain/ssl.cert'), 
    }; 

Hinweis: Sie müssen in nehmen etwa zu berücksichtigen ‚keine Zugriffskontrolle erlauben Herkunft‘