Когда я захотел развернуть свое приложение на Heroku, я сделал странное открытие: когда я запускаю сервер с «nodemon», соединение с базой данных работает отлично. Если вместо этого я использую «node server.js», соединение с базой данных не будет установлено. На самом деле я думал, что обе команды делают одно и то же, за исключением того, что благодаря nodemon вам не нужно перезапускать сервер после каждого изменения.
Кто-нибудь знает эту проблему и как ее исправить? Спасибо заранее!
Мой технический стек: Angular 14.3, Node 20.11, Express 4.17.1, Mongoose 8.2.3.
Вот ошибка:
Connection to database failed! MongoServerError: bad auth : authentication failed
at Connection.sendCommand (C:\Users\torbe\Documents\my-music-theory\backend\node_modules\mongodb\lib\cmap\connection.js:281:27)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async Connection.command (C:\Users\torbe\Documents\my-music-theory\backend\node_modules\mongodb\lib\cmap\connection.js:304:26)
at async continueScramConversation (C:\Users\torbe\Documents\my-music-theory\backend\node_modules\mongodb\lib\cmap\auth\scram.js:131:15)
at async executeScram (C:\Users\torbe\Documents\my-music-theory\backend\node_modules\mongodb\lib\cmap\auth\scram.js:80:5)
at async performInitialHandshake (C:\Users\torbe\Documents\my-music-theory\backend\node_modules\mongodb\lib\cmap\connect.js:101:13)
at async connect (C:\Users\torbe\Documents\my-music-theory\backend\node_modules\mongodb\lib\cmap\connect.js:19:9) {
errorResponse: {
ok: 0,
errmsg: 'bad auth : authentication failed',
code: 8000,
codeName: 'AtlasError'
},
ok: 0,
code: 8000,
codeName: 'AtlasError',
connectionGeneration: 0,
[Symbol(errorLabels)]: Set(2) { 'HandshakeError', 'ResetPool' }
}
Это мой package.json:
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "server.js",
"engines": {
"node": "20.x"
},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "Torben Jan Müller",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"mongoose": "^8.2.3",
"mongoose-unique-validator": "^5.0.0",
"nodemon": "^2.0.12",
"request-ip": "^3.3.0"
},
"devDependencies": {
"@types/request-ip": "0.0.38"
}
}
Какова точка входа в nodemon?
Спасибо за подсказки, я просто добавил сообщение об ошибке и свой package.json.





Проблема была вызвана переменной среды в файле server.js. Он хранился в файле nodemon.js и поэтому не мог быть найден, когда сервер запускался с «node server.js». Переменная среды теперь хранится в файле .env, база данных подключена, и развертывание в Heroku также работает отлично.
Установить дотенв
npm i dotenv
сервер.js
require('dotenv').config();
const connectToDatabase = async () => {
try {
await mongoose.connect("mongodb+srv://<username>:" + process.env.MONGO_ATLAS_PW + "@<cluster>.mongodb.net/<collection>?retryWrites=true&w=majority");
console.info('Connected to database!');
} catch (err) {
console.info('Connection to database failed!', err);
}
}
connectToDatabase();
Создайте файл .env в корне и включите переменные среды.
MONGO_ATLAS_PW = "password"
Какую ошибку вы получаете при установке соединения с базой данных?