node.js - 应用程序在本地连接到mongo,但是在heroku上部署时似乎会话创建失败
问题描述
所以,这是我第一次部署应用程序,我遇到了以下问题。
我可以在本地托管时使用 mongo(通过 atlas)没问题。用户是在注册时创建的,他们有一个会话。当代码部署到heroku(通过github连接):
- 当用户登录时登录过程超时。显示下面的控制台错误/heroku 日志
- 当用户去注册时注册过程超时,但用户是在数据库中创建的。
那么,当 mongo db 部署到 heroku 时,如何将会话写入到 mongo db?我的直觉是我的环境配置不正确,但我不知道从那里去哪里......
控制台错误:
登录:1POST 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=猎人2
MONGODB_URI=mongodb+srv://用户名:密码@cluster0.lmmct.mongodb.net/ dbUser ?retryWrites=true&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
})
})
)
解决方案
好的,所以除了一些需要清理的承诺之外,核心问题是当我在 heroku 中输入 MONGO_URI 的变量时,我在末尾添加了一个额外的空格。
就是这样。
推荐阅读
- android - 如何在 Android 中将启动图像和文本居中在其下方?
- javascript - 重命名谷歌驱动器中的文件名
- c++ - c++ 编译器是否保护 const 内存地址不受任何更改?
- python - 在pycharm中导入模块
- npm - WP Rig:运行 npm run build 时出错:找不到“/vendor/bin/phpcs”
- draftjs - Draft.js:点击占位符开始输入
- python - 日期格式以及如何打印出现的最大数字和日期
- python - 我不能运行 seaborn
- c++ - 如何使用qt在给定时间在新窗口中显示视频帧
- python - 在 python 子进程中检测关闭的非阻塞 stdout/stderr 管道