永远使用节点和表达时无法获取

时间:2017-06-29 11:44:04

标签: node.js express forever

我们将NodeJS和Express与永远结合使用。这很好,但现在我们必须更新我们的NodeJS版本,它们都停止工作。

我们使用带有ui-routing的angular作为前端路由,因此我们有一个静态文件夹。 我可以去我们的主页(/),然后从那里我可以导航到整个网站。但是当我刷新页面或直接进入页面(例如/产品)时,我得到了一个

  

无法获取/产品

错误。 节点给出404错误。

当我直接运行脚本时,一切正常。如您所见,我们在express中配置了2个静态文件夹。在更新之前一切正常。

我们还使用Apache将自定义域名重定向到特定页面而不更改浏览器中的地址,但这样可以正常工作(仅显示GET错误而不是页面)。 任何人都知道如何解决这个问题?

我们的app.js

var path = require('path');
var fs = require('fs');

// Return values from different config files will be added to this object so you can call config.[category].[property].
config = {};

// Save the app root directory to a global variable so it can be used in config files and other parts of the app. global.root is reserved, but global.path.root can be used without problems.
global.path = {root: path.resolve(__dirname)};

// Set environment and initialize environment-specific config variables
config.env = require(path.join(__dirname, 'config', 'env.config'));

// Set up database connection to use throughout the application
config.db = require(path.join(__dirname, 'config', 'db.config'));

// HTTP for development environment, HTTPS for production environment
var http = require('http');
var https = require('https');

// Set up debugging/logging for the development environment
var debug = require('debug')('http');

// Start the app using the Express settings/routines in express.config.
var app = require(path.join(__dirname, 'config', 'express.config'));

// Start GraphQL process
// require(path.join(__dirname, 'config', 'graphql.config'))(app);

var router = require(path.join(__dirname, 'config', 'routes.config'));

router(app);

// Running in production mode: HTTPS only
if(config.env.name === 'production') {
    var credentials = {
        privateKey: fs.readFileSync('privkey'),
        certificate: fs.readFileSync('fullchain')
    };

    var server = https.createServer(credentials, app);
    server.listen(4443);
    server.on('error', onError);
    server.on('listening', onListen);

    var server2 = http.createServer(app);
    server2.listen(8080);

// Running in development mode: HTTP only
} else {
    var server = http.createServer(app);
    server.listen(config.env.port);
    server.on('error', onError);
    server.on('listening', onListen);
}
//some listeners here

我们的express.config.js

var path = require('path');

console.log('Initializing API...');

var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var compression = require('compression');
var morgan = require('morgan');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var config =  require(path.join(__dirname, 'db.config'));

// The GraphQL server implementation for Express by the Apollo team.
var graphqlExpress = require('graphql-server-express').graphqlExpress;
var graphiqlExpress = require('graphql-server-express').graphiqlExpress;

var OpticsAgent = require("optics-agent");

var passport = require('passport');

var app = express();

// Handle application/json requests
app.use(bodyParser.json({ limit: '50mb' }));
// Handle application/x-www-form-urlencoded requests (usually POST, PUT, etc.)
app.use(bodyParser.urlencoded({ extended: false, limit: '50mb' }));

app.use(cookieParser());

app.use(session({
    store: new MongoStore({
        url: 'mongodb://' + config.url + ':' + config.port + '/' + config.name
    }),
    secret: 'secret',
    key: 'skey.sid',
    resave: false,
    saveUninitialized: false,
    cookie : {
        maxAge: 604800000 // 7 days in miliseconds
    }
}));

app.use(passport.initialize());
app.use(passport.session());
require(path.join(__dirname, 'auth.config'))(passport); //Load passport config

app.use(function(req, res, next) {
    req.resources = req.resources || {};
   // res.locals.app = config.app;
    res.locals.currentUser = req.user;
    res.locals._t = function (value) { return value; };
    res.locals._s = function (obj) { return JSON.stringify(obj); };
    next();
})

// Use gzip compression (following the Express.js best practices for performance)
app.use(compression());

// Serve frontend and static files like stylesheets and images from the Express server
app.use(express.static(path.join(__dirname, '..', '..', 'app')));
app.use(express.static(path.join(__dirname, '..', '..', 'public')));

// Morgan logger (previously named express-logger)
app.use(morgan("dev"));

// Generate the GraphQL schema
var schema = require(path.join(__dirname, 'graphql.config'))().then(function(schema) {

    /* Use Apollo Optics middleware for query optimization/tracing. */
    OpticsAgent.instrumentSchema(schema);
    app.use('/apiv2', OpticsAgent.middleware());

    console.log('GraphQL schema generated.');

    /* Return params object for Apollo GraphQL Server using a request handler function. */
    app.use('/apiv2', graphqlExpress(function(req) {

        return {
            schema: schema,
            debug: true,
            context: {
                opticsContext: OpticsAgent.context(req)
            }
        };
    }));

    app.use('/graphiql', graphiqlExpress({endpointURL: '/apiv2'}));

    console.log('GraphQL started.');

    /* Handle all other HTTP requests AFTER graphql server API endpoint and other routes are defined. */
    app.use('*', express.static('app'));
});

// Always keep the errorHandler at the bottom of the middleware function stack!

// Returns a user-friendly error message when the server fails to fulfill the request
app.use(function(err, req, res, next) {
    var status = 500, response = {message: 'An internal server error has occurred while trying to load this page. '};

    console.error(err.stack);
    res.status(status).json(response);

    next(err);
});

module.exports = app;

1 个答案:

答案 0 :(得分:0)

这不是解决这个问题的方法,但是我们永远改为PM2(https://github.com/Unitech/pm2)而且该程序正在完成他的工作!