`openUri()`的`uri`参数必须是字符串,get";未定义";
关于这件事我找了很多,但没有一个能帮到我。
当我运行我的项目时,我收到以下错误:
/home/ali/Desktop/personalitytest-backend/node_modules/mongoose/lib/connection.js:428 引发新的MongooseError(‘
uri
的uri
参数必须是’+ ^ 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"
相关文章