Я работаю над приложением 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'))
}
}
}
}
};