部署到 Heroku 时,使用 passport JS 和 mongoDB 登录失败

Login using passport JS and mongoDB fails when deployed to Heroku

我使用 node 和 express 构建了一个简单的应用程序。该应用程序使用 passport JS 作为登录系统,登录凭据存储在 MongoDB Atlas 中。当我在本地 运行 应用程序时,一切都很完美。但是,当我将它上传到 Heroku 时,一切似乎都很好,直到我尝试登录。当我输入我的登录详细信息并单击提交时,我在浏览器中收到“内部服务器错误”。我想不出任何合乎逻辑的原因,为什么这行不通。有人有什么主意吗?谢谢

heroku 中的日志显示如下(出于隐私原因,我编辑了 url)

2021-06-22T16:11:25.958314+00:00 app[web.1]: 在 listOnTimeout (internal/timers.js:554:17)

2021-06-22T16:11:25.958316+00:00 app[web.1]: 在 processTimers (internal/timers.js:497:7)

2021-06-22T16:11:25.958705+00:00 app[web.1]: [0mPOST /login [31m500[0m 10010.055 ms - 148[0m

2021-06-22T16:11:25.961104+00:00 heroku[路由器]: at=info method=POST path="/login" host=boiling-wave-***** .herokuapp.com request_id=99b8a8c6-87ef-464b-ab7a-78faa3808cb8 fwd="176.24.39.230" dyno=web.1 connect=0ms service=10013ms status=500 bytes=404 protocol=https

2021-06-22T16:12:41.330390+00:00 app[web.1]: MongooseError: 操作 users.findOne() 缓冲在 10000 毫秒后超时

2021-06-22T16:12:41.330401+00:00 app[web.1]:超时。 (/app/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:197:23)

2021-06-22T16:12:41.330402+00:00 app[web.1]: 在 listOnTimeout (internal/timers.js:554:17)

2021-06-22T16:12:41.330404+00:00 app[web.1]: 在 processTimers (internal/timers.js:497:7)

2021-06-22T16:12:41.330390+00:00 app[web.1]: MongooseError: Operation users.findOne() buffering timed out after 10000ms

2021-06-22T16:12:41.330401+00:00 app[web.1]: at Timeout. (/app/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:197:23)

您的 mongodb 使您的用户使用您输入的凭据的连接超时。检查它是 运行 并且可以从您的 Heroku 实例访问;如果它之前是 运行 在你的本地主机上,它可能无法从 Heroku 的云端访问。

此外,如果您觉得默认的 500 页太难理解,您可能希望向您的应用程序添加一些日志记录或响应处理以捕获这些错误并打印对您的用户更有用的内容。但是,如果这将是一个 public 应用程序,请注意不要透露太多。