【发布时间】: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