Я пытаюсь добавить соединение с базой данных на сервер fastify по разным причинам, это сценарий, и есть два отдельных mongodb, к которым необходимо подключиться.
index.js:
'use strict'
const dotenv = require('dotenv');
dotenv.config();
const path = require('path');
const tunnel = require('tunnel-ssh');
const Autoload = require('fastify-autoload');
const fastifyMongoose = require('fastify-mongoose-driver');
const fastify = require('fastify');
const { runTasks } = require('./taskRunner.js')
const { connectPerformanceDB } = require('./performanceDB.js')
const fastifyServer = fastify({ logger: process.env.DEVELOPMENT });
const User = require('./schemas/User');
const Promo = require('./schemas/Promo');
const Result = require('./schemas/PageSpeedResult')
fastifyServer.register(Autoload, { dir: path.join(__dirname, 'routes') });
const tunnelConfig = {
username: '*****',
host: '*****.com',
privateKey: require('fs').readFileSync('../../.ssh/id_rsa'),
srcPort: 27017,
dstPort: 27017
};
tunnel(tunnelConfig, error => {
if (error) console.log('SSH connection error: ', + error);
fastifyServer.register(fastifyMongoose, {
uri: process.env.MONGO_CONNECTION_STRING,
settings: {
user: '*************',
pass: '*************',
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
config: {
autoIndex: true
}
},
models: [User, Promo],
useNameAndAlias: true
});
fastifyServer.register(fastifyMongoose, {
uri: process.env.PERFORMANCE_DB_CONNECTION_STRING,
settings: {
user: '******',
pass: '**********',
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
config: {
autoIndex: true
}
},
models: [Result],
useNameAndAlias: true
})
fastifyServer.listen(process.env.PORT, (err, address) => {
if (err) throw err;
fastifyServer.log.info(`server listening on ${address}`);
});
});
Проблема, с которой я сталкиваюсь, заключается в том, что этот текущий код выдает ошибки следующим образом:
index.js:102
if (err) throw err;
^
MongoError: Authentication failed.
строка, в которой он ошибается, является оператором if внутри этого блока:
fastifyServer.listen(process.env.PORT, (err, address) => {
if (err) throw err;
fastifyServer.log.info(`server listening on ${address}`);
});
Подтвержденный пользователь, пароль и база данных верны.
константа uri для подключения выглядит так: mongodb://localhost/<name_of_cluster>
, также пробовали строку подключения, указанную в веб-приложении mongo на вкладке подключения.
Любые предложения по неудачной ошибке аутентификации или внедрению второго кластера БД с помощью fastify?
ОБНОВЛЕНИЕ: я пробовал несколько строк подключения. как упомянутый в посте, так и mongodb://<username>:<pass>@pagespeedinsights-hjdvp.mongodb.net/<database>?retryWrites=true&w=majority
и mongodb+srv://<username>:<pass>@pagespeedinsights-hjdvp.mongodb.net/<database>?retryWrites=true&w=majority
первые ошибки на сервере с:
Error: getaddrinfo ENOTFOUND pagespeedinsights-hjdvp.mongodb.net
вторые ошибки (из той же строки, что и исходная строка выше) на сервере с:
index.js:102
if (err) throw err;
^
TypeError: schema[key].forEach is not a function
MongoError: Authentication failed.
, вы пытались установить аутентификацию в uri?mongodb://user:password@localhost/dbName
- person Manuel Spigolon   schedule 23.06.2020mongodb://<username>:<pass>@pagespeedinsights-hjdvp.mongodb.net/<database>?retryWrites=true&w=majority
иmongodb+srv://<username>:<pass>@pagespeedinsights-hjdvp.mongodb.net/<database>?retryWrites=true&w=majority
- person Jim   schedule 23.06.2020fastifyMongoose
? Я подозреваю, что плагин не поддерживает множественные регистрации. - person Manuel Spigolon   schedule 23.06.2020