首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘`openUri()’的` The‘参数必须是一个字符串,得到“未定义”

‘`openUri()’的` The‘参数必须是一个字符串,得到“未定义”
EN

Stack Overflow用户
提问于 2019-03-20 18:06:51
回答 17查看 54.4K关注 0票数 18

我查了很多,但他们都帮不了我。

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

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

我的index.js文件:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
PORT=3000
DATABASE_URL=mongodb://localhost:27017/PersonalityTest
JWT_SECRETKEY=asfdawetq312etr%!@$qe

如果我简单地用mongoose.connect方法编写数据库url,就不会出现错误。

例如,这没有错误:

代码语言:javascript
复制
mongoose.connect("mongodb://localhost:27017/PersonalityTest", { useNewUrlParser: true, useCreateIndex: true });
EN

回答 17

Stack Overflow用户

发布于 2019-03-20 18:29:58

要读取.env-file,您需要安装一些将读取该文件的内容,例如dotenv

代码语言:javascript
复制
npm install dotenv --save

然后你在您的代码中要求该包

代码语言:javascript
复制
require('dotenv').config();

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

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

接下来,您可能需要在DATABASE_URL值周围添加双引号。

代码语言:javascript
复制
DATABASE_URL="mongodb://localhost:27017/PersonalityTest"
票数 16
EN

Stack Overflow用户

发布于 2020-12-27 10:36:55

您是否检查了您的.env变量是否可以从该index.js文件中读取?

例如,查看将其中一些内容记录到控制台时得到的信息:

代码语言:javascript
复制
console.log(process.env.DATABASE_URL);

如果您得到了“未定义”,那么您可以尝试,特别是为您的.env文件提供如下绝对路径:

代码语言:javascript
复制
const path = require('path');
require('dotenv').config({ path: path.resolve(__dirname, './.env') });

最近我一直在努力解决这个问题,在我的案例中,这个问题得到了解决。致以问候。

票数 11
EN

Stack Overflow用户

发布于 2021-06-24 14:47:01

这对我来说很有用

代码语言:javascript
复制
const dotenv = require('dotenv')
dotenv.config({path:__dirname+'/.env'});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55267494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档