[英]I am using mongoDB atlas and I am getting MongoServerError. When I am using without .env file every thing is fine but with env it is throwing error
PORT= <port>
DB_HOST= <host>
DB_URI= <uri>
DB_NAME= <db>
DB_USER= <user>
DB_PASS= <pass>
// app.js file
import express from 'express';
import mongoose from 'mongoose';
import fetch from "node-fetch";
import Project from './project.js';
import dotenv from "dotenv";
dotenv.config()
console.log(dotenv.parsed);
const app = express();
mongoose
.connect(process.env.DB_URI,{
dbName: 'process.env.DB_NAME',
user: 'process.env.DB_USER',
pass: 'process.env.DB_PASS',
})
.then((result) => {
console.log("Database connected successfuly!");
})
.catch((err) => {
console.error(err);
});
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.get('/project', (req, res) => {
Project.find({}, (err, data) => {
res.json(data);
});
});
const port= process.env.PORT || 3000
app.listen(port, () => {
console.log('starting server at port' + port);
})
// Error encountered
undefined
(node:5659) ExperimentalWarning: stream/web is an experimental feature. This feature could change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
starting server at port3000
MongoServerError: bad auth : Authentication failed.
at MessageStream.messageHandler (/home/varsha/Documents/projects/node_modules/mongodb/lib/cmap/connection.js:467:30)
請幫助如何解決此問題。 在 MessageStream.emit (node:events:390:28) at processIncomingData (/home/varsha/Documents/projects/node_modules/mongodb/lib/cmap/message_stream.js:108:16) at MessageStream._write (/ home/varsha/Documents/projects/node_modules/mongodb/lib/cmap/message_stream.js:28:9) at writeOrBuffer (node:internal/streams/writable:389:12) at _write (node:internal/streams/writable: 330:10) 在 MessageStream.Writable.write (node:internal/streams/writable:334:10) at TLSSocket.ondata (node:internal/streams/readable:754:22) at TLSSocket.emit (node:events:390) :28) at addChunk (node:internal/streams/readable:315:12) { ok: 0, code: 8000, codeName: 'AtlasError' }
這是因為您將 env var 名稱作為文字字符串傳遞,而不是支持值。
意思是,如果您更改此部分:
dbName: 'process.env.DB_NAME',
user: 'process.env.DB_USER',
pass: 'process.env.DB_PASS',
對此:
dbName: process.env.DB_NAME,
user: process.env.DB_USER,
pass: process.env.DB_PASS,
以及包含以下內容的.env
文件:
注意: PORT
是可選的,因為您可以使用.env
值或 3000(例如const port = process.env.PORT || 3000
)
PORT=1234
DB_URI=mongo://your.uri
DB_NAME=yourdbnamegoeshere
DB_USER=dbuser
DB_PASS=dbpass
此外,如果您將此代碼發布到公共存儲庫,請確保使用包含.env
的.gitignore
文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.