【问题标题】:MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` is a stringMongooseError:`openUri()` 的 `uri` 参数必须是字符串,得到“未定义”。确保 `mongoose.connect()` 的第一个参数是一个字符串
【发布时间】:2023-03-31 14:52:02
【问题描述】:

当我尝试在 heroku 上部署我的应用时,它给了我这个错误:

MongooseError:openUri()uri 参数必须是字符串,得到“未定义”。确保mongoose.connect()mongoose.createConnection() 的第一个参数是字符串。

当我在本地部署应用程序时,它运行良好。 我阅读了其他问题,常见的解决方案是将 .env 文件移动到根目录中。 问题是我已经有了它。 我认为我在将 db dsn 传递给 mongoose.connect() 函数时做错了。

这里是 app.js 文件中的导入:

const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session) //session come argomento
const compression = require('compression') //session come argomento

const port = process.env.PORT || 8080;

require('dotenv').config();
const config = require('./config/Config.js'); // [process.env.NODE_ENV || 'test']
const datiRegioniAPI = require('./DatiRegioniAPI');
const db = require ('./lib/db.js');
const userService = require('./services/UserService.js');
const mongoose = require('mongoose');
const aut = require('./lib/aut.js');
const helmet = require("helmet")
const app = express();

这里是 app.js 文件中的 db.connect 函数:

db.connect(config.production.dsn)
   .then(()=>{
      app.listen(port,(err)=>{
         if(err){console.error(err, "### ERRORE CONNESSIONE DB");}
         else{console.log("connected on ", port);}
      })
   })
   .catch((err)=>{
      console.error(err, "### CATCH error db connection");
   })

这是我的 config.js 文件:

const path = require("path");


module.exports = {
    data:{
        avatars: path.join(__dirname, "../data/avatars")
    },
    test : {
        dsn: process.env.TEST_DB_DSN,
    },
    production : {
        dsn: process.env.PRODUCTION_DB_DSN,
    }
}

这是我的 db.js 文件:

我基本上把这个函数作为中间件导出到app.js文件

const mongoose = require('mongoose')
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);



module.exports.connect = async dsn => {
    mongoose.connect(dsn) 
}

 

这是一个奇怪的问题,因为它在本地工作正常,但在 全部部署在heroku上时

【问题讨论】:

    标签: node.js mongodb heroku mongoose web-deployment


    【解决方案1】:

    将应用部署到生产环境时

    require('dotenv').config()

    无效,在生产环境中找不到变量。因此我的解决方案是在 Heroku 中手动添加环境变量,如果 NODE_ENV=='production' 使用这些变量。

    【讨论】:

      猜你喜欢
      • 2023-02-11
      • 2021-05-22
      • 2021-03-24
      • 2019-10-05
      • 2019-08-11
      • 2022-11-16
      • 2021-05-21
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多