我的应用程序能够在本地连接到MongoDB,但是在heroku日志上却出现此错误:
错误:无效的架构,预期为mongodb
或mongodb+srv
这是我与mongodb的连接在server.js文件中的样子:
// // DB config
const db = require("./config/keys").mongoURI;
// // Connect to MongoDB
mongoose
.connect(db)
.then(() => console.log("MongoDB connected"))
.catch(err => console.log(err));
配置/键:
if (process.env.NODE_ENV === "production") {
module.exports = require("./keys_prod");
} else {
module.exports = require("./keys_dev");
}
keys_dev:
module.exports = {
mongoURI:
"mongodb://jenn123:jenn123@devconnect-shard-00-00-acrk4.mongodb.net:27017,devconnect-shard-00-01-acrk4.mongodb.net:27017,devconnect-shard-00-02-acrk4.mongodb.net:27017/test?ssl=true&replicaSet=devconnect-shard-0&authSource=admin&retryWrites=true",
secretOrKey: "secret"
};
keys_prod:
module.exports = {
mongoURI: "process.env.MONGO_URI",
secretOrKey: "process.env.SECRET_OR_KEY"
};
非常感谢您的帮助
答案 0 :(得分:1)
好吧,您输入的生产密钥不正确。
process.env是一个对象,其中包含env变量作为键及其值。 因此,您不必删除字符串并将其视为对象,而不必将其放入字符串中。如下所示:
module.exports = {
mongoURI: process.env.MONGO_URI,
secretOrKey: process.env.SECRET_OR_KEY
};
答案 1 :(得分:0)
这通常是我与猫鼬建立联系的方式。
foreach($json["descriptions"] as $value)
{
if($value['class'] == '3')
$names[] = $value['name'];
}
return $names;
然后,您可以在这样的文件中使用它(假设您已经定义了作业模式并正在导入它):
const mongoose = require('mongoose');
const dotenv = require('dotenv').config();
let db = mongoose.connection;
mongoose.connect('your connection URL here', {
auth: {
user: "Your username",
password: "Your password"
}
})
.then(() => {
console.log('connection successful')
db = mongoose.connection;
module.exports = db;
})
.catch((err) => {
console.error(err)
});