应用程序在本地连接到mongo,但是在heroku上部署时似乎会话创建失败

Posted

技术标签:

【中文标题】应用程序在本地连接到mongo,但是在heroku上部署时似乎会话创建失败【英文标题】:app connects to mongo locally, but it seems that session creation fails when deployed on heroku 【发布时间】:2021-03-09 04:27:11 【问题描述】:

所以,这是我第一次部署应用程序,我遇到了以下问题。

我可以在本地托管时使用 mongo(通过 atlas)没问题。用户是在注册时创建的,他们有一个会话。当代码部署到heroku时(通过github连接):

当用户登录时 登录过程超时。显示下面的控制台错误/heroku 日志 用户去注册时注册过程超时,但用户是在db中创建的。

那么,当 mongo db 部署到 heroku 时,如何将会话写入到 mongo db?我的直觉是我的环境配置不正确,但我不知道从那里去哪里......

控制台错误:

登录: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://用户名:密码@cluster0.lmmct.mongodb.net/dbUser?retryWrites=true&w=多数

代码详情

    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】:

好的,所以除了一些需要清理的承诺之外,核心问题是当我在 heroku 中输入 MONGO_URI 的变量时,我在末尾添加了一个额外的空格。

就是这样。

【讨论】:

以上是关于应用程序在本地连接到mongo,但是在heroku上部署时似乎会话创建失败的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 没有连接到 Mongo Atlas DB?

Rails 4.1.4 在推送到 Heroku 时尝试连接到未初始化的 Mongo 数据库(rake assets:precompile)

Heroku - Socket.IO 客户端总是连接到本地主机

在 Heroku 上为 Mongo Labs 数据库配置 Node.js 连接字符串

无法使用 sequelize 从本地节点应用程序连接到 heroku postgresql 数据库

如何让本地heroku应用程序连接到远程REDIS?