【问题标题】:openshift express app serving static files提供静态文件的 openshift express 应用程序
【发布时间】:2016-10-26 08:54:18
【问题描述】:

这里是菜鸟。我正在尝试使用 express 在 Openshift 上构建一个 api 服务器。我还希望能够从 /static 文件夹中提供静态文件。问题是,我不知道如何在 Openshift 上进行设置。我已经尝试了我能想到的一切。

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

路由器.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 环境变量?有人可以将我推向正确的方向吗?

【问题讨论】:

  • 编辑:在我添加行之后:app.use(express.static('/static'));到 app.js 文件,它可以在本地工作,但仍然不能在 Openshift 上工作。我真的需要一些帮助,而且由于 openshift 是免费的,所以他们反应不快。

标签: node.js express static openshift


【解决方案1】:

在 express 中,您可以通过使用 express.static() 将以下内容添加到您的 app.js 来提供静态文件

var path = require('path');

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

【讨论】:

  • 我之前在没有 path.join 的情况下尝试过这个,现在我已经用 path.join 再次尝试过,就像你在这里一样。它仍然返回 404 not found。当您在所有路由之前说,您是指在路由器文件中吗?或者在我上面有箭头的应用文件中?
  • 是的,你有评论箭头
  • 我试过了,但仍然找不到 404。我在想这可能与Openshift有关?也许它无法指向正确的目录?我可以看到文件在那里,但我似乎无法提供它们。
  • 你的静态目录的实际路径是什么?它实际上是根目录下的/static 吗?这就是我提供的代码的作用。
  • 是的,就是这样。我必须在路由器文件中做任何事情吗?如您所见,我没有在那里设置根路由。我需要吗?
猜你喜欢
  • 2017-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多