`openUri()`的`uri`参数必须是字符串,get"未定义"

2022-02-21 00:00:00 node.js javascript mongoose

关于这件事我找了很多,但没有一个能帮到我。

当我运行我的项目时,我收到以下错误:

/home/ali/Desktop/personalitytest-backend/node_modules/mongoose/lib/connection.js:428 引发新的MongooseError(‘uriuri参数必须是’+ ^ MongooseError:openUri()uri参数必须是字符串,得到"未定义"。确保将第一个参数设置为 mongoose.connect()mongoose.createConnection()是字符串。

我的index.js文件:

const express = require('express'),
  app = express(),
  mongoose = require('mongoose'),
  rateLimit = new require('express-rate-limit')({
    windowMs: 1000 * 60 * 10,
    max: 500,
    handler: (req, res) => {
      res.json({
        data: 'Your request was too much, please try again in 10 minutes later.',
        status: 'error'
      })
    }
  });
const Application = new class {
  constructor() {
    this.setConfig();
    this.setupDB();
    this.setRouters();
    this.setupExpress();
  }
  setConfig() {
    require('dotenv').config();
    app.use(require('helmet')());
    app.use(express.json());
  }
  setupDB() {
    mongoose.Promise = global.Promise;
    mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true, useCreateIndex: true });
  }
  setRouters() {
    app.use('/', require('./routes'));
  }
  setupExpress() {
    app.listen(process.env.PORT, () => console.log(`Listening on port ${process.env.PORT}.`));
    // app.listen(process.env.PORT, process.env.IP, () => console.log(`Listening on port ${process.env.PORT}.`));
  }
}

我的.env文件:

PORT=3000
DATABASE_URL=mongodb://localhost:27017/PersonalityTest
JWT_SECRETKEY=asfdawetq312etr%!@$qe

如果我只是在mongoose.connect方法中编写数据库url,就不会有错误。

例如,这没有错误:

mongoose.connect("mongodb://localhost:27017/PersonalityTest", { useNewUrlParser: true, useCreateIndex: true });

解决方案

要读取.env-文件,您需要安装用于读取该文件的程序,例如dotenv软件包

npm install dotenv --save

然后您require that package in your code

require('dotenv').config();

根据dotenv文档,您应该这样做

在您的应用程序中,请尽早要求并配置dotenv。

接下来,您可能需要在DATABASE_URL值两边添加双引号

DATABASE_URL="mongodb://localhost:27017/PersonalityTest"

相关文章