即使变量是字符串,也会出现“ MongooseError('openUri()`的`uri`参数必须为'+”错误)

时间:2019-11-10 01:39:05

标签: javascript node.js express mongoose mongoose-schema

我只想通过猫鼬将我的数据库连接到我的本地主机上。但是,我收到此错误:

C:\Users\przyb\Desktop\JWT\node_modules\mongoose\lib\connection.js:520
    throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
    ^
MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.

这让我感到困惑,因为要传递的变量肯定是字符串。这是我的文件树:

JWT
|
model --- User.js
node_modules
public
routes --- .env.js, auth.js
views
index.js
package.json
package-lock.json

index.js

const express = require("express");
const app = express();
const mongoose = require("mongoose");
const dotenv = require("dotenv").config();

//Imported routes
const authRoute = require('./routes/auth');

//Connect to db
mongoose.connect(
    process.env.DB_CONNECT,
    {useNewUrlParser:true},
    () => console.log("connected to db")
);

//Middleware
app.use(express.json());

//Route Middlewares
app.use('/api/User', authRoute);

app.listen(3000, () => console.log("All good"));

.env.js

DB_CONNECT = "mongodb+srv://USERNAME:PASSWORD@cluster0-wu2im.mongodb.net/test?retryWrites=true&w=majority";

Stackoverflow表示我对此问题的代码过多,因此无法向您展示auth.js和User.js。

2 个答案:

答案 0 :(得分:0)

此问题已通过以下方式解决:

  • 将文件.env.js重命名为.env
  • .env文件放入项目的根目录。

答案 1 :(得分:0)

此问题已解决:

  1. 将您的 .env.js 文件重命名为仅 .env
  2. .env 文件放在项目的根目录下。与您的 package.json 文件所在的目录相同。
  3. 如果在您部署它时出现此问题,例如在 Heroku 上。在 heroku 上,它查找在 heroku 中声明的环境变量。所以只需遵循:
  4. 转到您的信息中心,然后在您选择的应用中转到设置标签。
  5. 转到配置变量并点击显示变量。
  6. 只需在键值对中添加您的 .env 变量即可。
  7. 例如。将 DB_CONNECT 放在 Key 中,将 mongodb+srv://USERNAME:PASSWORD@cluster0-wu2im.mongodb.net/test?retryWrites=true&w=majority 放在 Value 中。 而已。您将能够部署您的应用,包括您的 .env 变量。