2016-06-23 2 views
0

Noob здесь. Я пытаюсь построить сервер api на Openshift, используя экспресс. Я также хочу иметь возможность обслуживать статические файлы из папки/static. Проблема в том, что я не могу понять, как настроить его на Openshift. Я пробовал все, что мог придумать.openshift express приложение, обслуживающее статические файлы

У меня есть 2 файла сервера, приложение, которое вызывает файл router.js для маршрутов.

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? 
} 

Все работает, кроме обслуживания статических файлов. Не уверен, что мне нужно поместить что-то в файл app.js в качестве промежуточного программного обеспечения, в файл маршрутизатора или и то, и другое. Также не уверен, нужно ли мне использовать переменные среды Openshift? Может кто-то подтолкнет меня в правильном направлении?

+0

EDIT: После того, как я добавил строку: app.use (express.static ('/ статический')); в файл app.js, он работает локально, но все же не работает в Openshift. Мне действительно нужна помощь, и поскольку openshift свободен, они не очень отзывчивы. – Coco

ответ

0

В курьерский вы можете обслуживать статические файлы, добавив следующую строку в ваш app.js используя express.static()

var path = require('path'); 

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

Я пробовал это раньше без path.join, теперь я попробовал еще раз с path.join, как вы здесь. Он по-прежнему возвращает 404 не найден. Когда вы говорите перед всеми вашими маршрутами, вы имеете в виду в файле маршрутизатора? Или в файле приложения, где у меня есть стрелка выше? – Coco

+0

Да, где у вас есть комментарий arrow – peteb

+0

Я пробовал, и я все еще получаю 404 не найден. Я думаю, что это может быть связано с Openshift? Может быть, у него проблемы с правильным каталогом? Я могу посмотреть, есть ли файлы, я просто не могу их обслуживать. – Coco

Смежные вопросы