2016-06-23 7 views
0

Noob hier. Ich versuche einen Api-Server auf OpenShift mit Express zu bauen. Ich möchte auch statische Dateien aus dem Ordner/static bereitstellen können. Das Problem ist, ich kann nicht herausfinden, wie man es bei OpenShift einrichtet. Ich habe alles versucht, was mir einfällt.openshift express app serving statische dateien

Ich habe 2 Server-Dateien, die App-Setup, die eine router.js-Datei für die Routen aufruft.

app.js

const express = require('express'); 
    const http = require('http'); 
    const bodyParser = require('body-parser'); 
    const morgan = require('morgan'); 
    const env = process.env; 
    const app = express(); 
    const router = require('./router'); 
    const mongoose = require('mongoose'); 
    const cors = require('cors'); 


    // DB Setup 
    // default to a 'localhost' configuration: 
    var connection_string = '127.0.0.1:27017/api:api'; 
    // if OPENSHIFT env variables are present, use the available connection info: 
    if(env.OPENSHIFT_MONGODB_DB_PASSWORD){ 
     connection_string = env.OPENSHIFT_MONGODB_DB_USERNAME + ":" + 
     env.OPENSHIFT_MONGODB_DB_PASSWORD + "@" + 
     env.OPENSHIFT_MONGODB_DB_HOST + ':' + 
     env.OPENSHIFT_MONGODB_DB_PORT + '/' + 
     env.OPENSHIFT_APP_NAME; 
    } 
    mongoose.connect('mongodb://' + connection_string); 


    // App Setup 
    app.use(morgan('combined')); //logging middleware 
    app.use(cors()); // allow cross origin requests 
    app.use(bodyParser.json({ type: '*/*'})); //read requests as json 

-----> do I need to put something here ???? 

    router(app); 


    // Server Setup 
    const port = env.NODE_PORT || 3090; 
    const ip = env.NODE_IP || 'localhost'; 
    const server = http.createServer(app); 
    server.listen(port, ip); 
    console.log('Server listening on: ', port); 

router.js

const Authentication = require('./controllers/authentication'); 
const passportService = require('./services/passport'); 
const passport = require('passport'); 
const requireAuth = passport.authenticate('jwt', { session: false}); 
const requireSignin = passport.authenticate('local', { session: false}); 

module.exports = function(app) { 

app.post('/signup', Authentication.signup); 
app.post('/signin', requireSignin, Authentication.signin); 

app.get('/health', function (req, res, next) { 
     res.writeHead(200); 
    res.end(); 
}); 

----> and/or something here? 
} 

Alles funktioniert, außer statische Dateien dienen. Ich bin mir nicht sicher, ob ich etwas in die app.js-Datei als Middleware, in die Router-Datei oder beides schreiben muss. Auch nicht sicher, ob ich OpenShift-Umgebungsvariablen verwenden muss? Kann mich jemand in die richtige Richtung schubsen?

+0

EDIT: Nachdem ich die Zeile hinzugefügt: app.use (express.static ('/ static')); in der app.js-Datei, es funktioniert lokal, aber immer noch nicht auf Openshift. Ich brauche wirklich Hilfe, und da OpenShift kostenlos ist, sind sie nicht sehr reaktionsschnell. – Coco

Antwort

0

Expressgut Sie statische Dateien, indem Sie die folgenden zu Ihrem app.jsexpress.static() Verwendung dienen können

var path = require('path'); 

// put this before all of your routes 
app.use(express.static(path.join(__dirname, 'static'))); 
+0

habe ich das vorher ohne den path.join versucht, jetzt habe ich es nochmal mit dem path.join versucht wie du es hier hast. Es gibt immer noch 404 nicht gefunden. Wenn du vor all deinen Routen sagst, meinst du in der Router-Datei? Oder in der App-Datei, wo ich den Pfeil oben habe? – Coco

+0

Ja, wo Sie den Kommentar Pfeil haben – peteb

+0

Ich habe es versucht und ich bekomme immer noch 404 nicht gefunden. Ich denke, es könnte etwas mit Openshift zu tun haben? Vielleicht hat es Probleme, auf das richtige Verzeichnis zu zeigen? Ich kann sehen, dass die Dateien da sind, ich kann ihnen einfach nicht dienen. – Coco