【问题标题】:Mongoose Error 'uri' parameter must be a string got undefinedMongoose 错误“uri”参数必须是未定义的字符串
【发布时间】:2022-02-05 05:48:46
【问题描述】:

每当我尝试运行节点 index.js 时,我都会收到“错误 [MongooseError]:openUri()uri 参数必须是字符串,得到“未定义”。确保 mongoose.connect() 的第一个参数或mongoose.createConnection() 是一个字符串”

另外,index.js 和 .env 在同一个目录中。

index.js:

const express = require('express');
require('dotenv').config();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const routes = require('./routes/api');
const path = require('path');


const app = express();
const port = process.env.PORT || 3000;

mongoose.connect(process.env.DB, { useNewUrlParser: true })
  .then(() => console.log(`Database connected successfully`))
  .catch(err => console.log(err));

mongoose.Promise = global.Promise;


app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.use(bodyParser.json());

app.use('/api', routes);

app.use((err, req, res, next) => {
  console.log(err);
  next();
});


app.listen(port, () => {
  console.log(`Server running on port ${port}`)
});

.env:

NODE_ENV = development
PORT = 3000
MONGO_URI = mongodb+srv://"User":1@cluster0.da5tj.mongodb.net/myFirstDatabase?retryWrites=true&w=majority

【问题讨论】:

  • process.env.DB 定义在哪里?
  • 在 node_modules/dotenv/Readme 中: const db = require('db') db.connect({ 主机:process.env.DB_HOST,用户名:process.env.DB_USER,密码:process.env .DB_PASS })
  • 只在索引中

标签: javascript node.js mongodb express mongoose


【解决方案1】:

您在这里遇到了一个小错误,但这里是修复,您的 .env 将您的连接字符串存储为 MONGO_URI 并且您的主要代码正在调用 process.env.DB 这会导致您遇到猫鼬错误,我已经运行您的代码与我的数据库及其工作正常您的代码应该如下所示,而无需更改您的 .env 文件

const express = require('express');
require('dotenv').config();
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const routes = require('./routes/api');
const path = require('path');


const app = express();
const port = process.env.PORT || 3000;

mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true })
  .then(() => console.log(`Database connected successfully`))
  .catch(err => console.log(err));

mongoose.Promise = global.Promise;


app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

app.use(bodyParser.json());

app.use('/api', routes);

app.use((err, req, res, next) => {
  console.log(err);
  next();
});


app.listen(port, () => {
  console.log(`Server running on port ${port}`)
});

【讨论】:

  • 似乎没有任何改变。还是一样的错误
  • 我认为您应该登录process.env 以查看您的环境变量是否正确定义,请您分享您的猫鼬版本吗?
【解决方案2】:

我遇到了同样的问题,这对我有用。在 dotenv 中需要。

require('dotenv').config()

...并使用变量 MONGO_URI = my database connection 设置 .env 文件

...最后确保将以下内容传递给 mongoose.connect:

process.env.MONGO_URI

希望对您有所帮助。我是菜鸟,所以不要指望我能回答很多问题。

【讨论】:

    猜你喜欢
    • 2021-05-21
    • 2019-08-11
    • 2021-05-22
    • 2021-03-24
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 2020-12-01
    相关资源
    最近更新 更多