#node.js #heroku #mongoose #express-session #mongodb-atlas
#node.js #heroku #mongoose #экспресс-сессия #mongodb-atlas
Вопрос:
Итак, это мое первое развертывание приложения, и у меня следующая проблема.
Я могу использовать mongo (через atlas) при локальном размещении без проблем. Пользователи создаются при регистрации, и у них есть сеанс. Когда код развертывается в heroku (через соединение с github) :
- когда пользователь переходит к входу в систему, время ожидания процесса входа истекает. Ниже отображаются журналы ошибок консоли / heroku
- когда пользователь переходит к регистрации, время ожидания процесса регистрации истекает, но пользователь создается в БД.
Итак, как я могу записать сеансы в mongo db, когда они будут удалены из heroku? Мой инстинкт заключается в том, что у меня неправильная конфигурация среды, но я понятия не имею, куда идти дальше…
ошибка консоли :
вход: 1 POST https://my-berlin-map.herokuapp.com/login 503 (Service Unavailable)
подробности heroku
2020-11-25T17:07:49.775428 00:00 heroku[router]: at=error code=H15 desc="Idle connection" method=POST path="/login" host=my-berlin-map.herokuapp.com request_id=f8671320-de7a-42c1-890d-4bdadca078a8 fwd="46.94.150.220" dyno=web.1 connect=1ms service=55124ms status=503 bytes= protocol=https 2020-11-25T17:07:49.775925 00:00 app[web.1]: [0mPOST /login [36m302[0m 119.004 ms - 46[0m
В файле .env мы указали следующее (и добавили их как переменные в heroku)
ПОРТ = 3000
ENV = разработка
MAPBOXSECRET = ключ
SESSION_SECRET= hunter2
MONGODB_URI=mongodb srv://username:password@cluster0.lmmct.mongodb.net/dbUser?retryWrites=trueamp;w=majority
подробности кода
require('dotenv').config();
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const express = require('express');
const favicon = require('serve-favicon');
const hbs = require('hbs');
const mongoose = require('mongoose');
const logger = require('morgan');
const path = require('path');
mongoose
.connect(process.env.MONGODB_URI, {
useCreateIndex: true,
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(x => {
console.log(`Connected to Mongo! Database name: "${x.connections[0].name}"`)
})
.catch(err => {
console.error('Error connecting to mongo', err)
});
const app_name = require('./package.json').name;
const debug = require('debug')(`${app_name}:${path.basename(__filename).split('.')[0]}`);
const app = express();
// Middleware Setup
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
// session configuration
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
app.use(
session({
secret: process.env.SESSION_SECRET,
cookie: { maxAge: 24 * 60 * 60 * 1000 },
saveUninitialized: false,
resave: true,
store: new MongoStore({
mongooseConnection: mongoose.connection,
ttl: 24 * 60 * 60 * 1000
})
})
)
Ответ №1:
хорошо, итак, помимо некоторой необходимой очистки обещаний, основная проблема заключалась в том, что когда я ввел переменную для MONGO_URI в heroku, я добавил дополнительный пробел в конце.
это было так.