req.session не определен при развертывании Heroku, при условии, что он не может соединиться с Amazon RDS MySQL - PullRequest
0 голосов
/ 15 марта 2020

Я работаю над приложением Nuxt. js. При использовании express -session и express - mysql -session серверное промежуточное ПО всегда выдает ошибку, что req.session не определен. Эта проблема не существует, когда я запускаю на своем локальном хосте, но при развертывании в Heroku. Если кто-нибудь знает, как решить, пожалуйста, не оставляйте меня с этой проблемой навсегда. Спасибо. Если вам нужно увидеть какую-либо часть моего кода, дайте мне знать. Я хочу подключить Heroku к Amazon RDS MySQL. Я обнаружил, что express - mysql -сессия, возможно, не может соединиться с базой данных, поскольку она не создает таблицу сеансов в базе данных.

//app.js
const config = require('config');

const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');

const logger = require('./lib/logger');
const helmet = require('helmet'); // Security

const { mainPool, mysql } = require('./db-connection');

global._ = require('underscore');

const app = express();

logger.debug("Overriding 'Express' logger");
app.use(require('morgan')('combined', { stream: logger.stream }));

app.use(express.json({ limit: config.test.requests.maximum }));
app.use(express.urlencoded({ extended: false }));

app.use(helmet({
  hsts: false // Temp patch to perhaps allow non-SSL during testing  TODO   REMOVE WHEN SSL AVAILABLE
}));

app.use(cookieParser());

var session = require('express-session');
var MySQLStore = require('express-mysql-session')(session);
var sessionStore = new MySQLStore({}/* session store options */, mainPool);

app.use(session({
  // How frequently expired sessions will be cleared; milliseconds:
  checkExpirationInterval: config.test.sessions.checkExpirationInterval,
  // The maximum age of a valid session; milliseconds:
  expiration: config.tests.sessions.expiration,
  // Whether or not to create the sessions database table, if one does not already exist:
  createDatabaseTable: true,
  // Number of connections when creating a connection pool:
  connectionLimit: 1,
  key: config.test.sessions.key,
  secret: config.test.sessions.secret,
  store: sessionStore,
  resave: false,
  saveUninitialized: false
}));

module.exports = app;
// index.js
const app = require('./app.js');
const consola = require('consola')
const { Nuxt, Builder } = require('nuxt')

// const app = express();
// Import and Set Nuxt.js options
const config = require('../nuxt.config.js')
config.dev = process.env.NODE_ENV !== 'production'

async function start () {
  // Init Nuxt.js
  const nuxt = new Nuxt(config)

  const { host, port } = nuxt.options.server

  await nuxt.ready()
  // Build only in dev mode
  if (config.dev) {
    const builder = new Builder(nuxt)
    await builder.build()
  }

  // Give nuxt middleware to express
  app.use(nuxt.render)

  // Listen the server
  app.listen(port, host)
  consola.ready({
    message: `Server listening on http://${host}:${port}`,
    badge: true
  })
}
start()
\\ db-connection
var mysql = require('mysql2/promise');
const logger = require('./lib/logger');

var mainPool;

const config = require('config');

logger.info('Creating MySQL connection pool, connectionLimit:', config.test.dbconfig.mainDatabase.connectionLimit);

// MySQL connection pools
mainPool = mysql.createPool(config.test.dbconfig.mainDatabase);

module.exports.mainPool = mainPool;
module.exports.mysql = mysql;
// config.js
const fs = require('fs');
const path = require('path');

module.exports = {
  test: {
    dbconfig: {
      mainDatabase: {
        host: 'host.rds.amazonaws.com',
        user: 'username',
        password: 'pwd',
        database: 'dbmane',
        connectionLimit: 3,
        ssl: {
          ca: fs.readFileSync(path.resolve(__dirname, 'amazon-rds-ca-cert.pem'))
        }
      }
    }
  }
};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...