2017-06-07 35 views
8

Piszę MongoDB połączony aplikację i podczas łączenia się z serwerem jak poniżej dostaję ostrzeżenie takiego:Mongoose connect rzucanie ostrzeżenie

metoda Db.prototype.authenticate nie będzie już dostępny w następnej Wersja 3.x, ponieważ MongoDB 3.6 zezwala na uwierzytelnianie tylko użytkownikom w administracyjnym środowisku db i nie zezwala na wielokrotne uwierzytelnianie na gnieździe. Uwierzytelnij za pomocą MongoClient.connect za pomocą poświadczeń uwierzytelniających.

Moi kody są jak poniżej

import mongoose from 'mongoose'; 
import config from './config'; 
mongoose.connect(config.db.uri); 

na config.js

const config = { 
    name: 'API', 
    version: '0.0.1', 
    env: process.env.NODE_ENV || 'development', 
    port: process.env.PORT || 3000, 
    base_url: process.env.BASE_URL || 'http://localhost:3000', 
    db: { 
     uri: 'mongodb://admin:[email protected]:27017/ai?authSource=admin', 
    }, 
} 

export default config; 

Używam v8.0.0 węzeł i mangusty 4.10.5

Odpowiedz

9

Jest to nieszkodliwe ostrzeżenie i znana mangusta issue. Szczegółowe informacje można znaleźć w wątku mongoose, ale od wersji 4.10.5 mongoose nie jest znane obejście problemu i nie powinno to wpłynąć na funkcjonalność aplikacji.

+0

oznaką ulgi: D Dzięki –

2

Ostrzeżenia dotyczą sterownika MongoDB, który nie obsługuje interfejsu API używanego przez domyślną logikę połączenia mangusty. Począwszy od mangusty 4.11.1 można zdecydować się na stosowanie przez klienta Mongo ustawienie opcji useMongoClient np

mongoose.connect(config.db.uri, { useMongoClient: true, /* other options */ }) 

przypomnieć, że stosując Mongo natywną klient może mieć niepożądane skutki, więc należy sprawdzić wszystko w sposób wyczerpujący
Zobacz więcej szczegółów here

+1

Ustawienie tej opcji powoduje więcej problemów niż rozwiązuje za dużo ludzi. – robertklep

+0

Rzeczywiście, 4.11.0 jest obecnie niestabilny –

+0

sam problem podczas używania {useMongoClient: true,/* other options * /} –

1
Db.prototype.authenticate method will no longer be available in the next major release 3.x as MongoDB 3.6 will only allow auth against users in the admin db and will no longer allow multiple credentials on a socket. Please authenticate using MongoClient.connect with auth credentials. 

Tak, jest to nieszkodliwe ostrzeżenie i znany problem mangusta. jak powiedział @ Phu Ngo

Można więc uciec z tym problemem, aktualizując do najnowszej wersji mangusta, która jest powyżej 4.11.1.

Po uaktualnieniu wersji to ostrzeżenie może pojawić się, jeśli użyto opcji połączeń.

he server/replset/mongos options are deprecated, all their options are supported at the top level of the options object [poolSize,ssl,sslValidate,sslCA,sslCert,sslKey,sslPass,sslCRL,autoReconnect,noDelay,keepAlive,connectTimeoutMS,family,socketTimeoutMS,reconnectTries,reconnectInterval,ha,haInterval,replicaSet,secondaryAcceptableLatencyMS,acceptableLatencyMS,connectWithNoPrimary,authSource,w,wtimeout,j,forceServerObjectId,serializeFunctions,ignoreUndefined,raw,bufferMaxEntries,readPreference,pkFactory,promiseLibrary,readConcern,maxStalenessSeconds,loggerLevel,logger,promoteValues,promoteBuffers,promoteLongs,domainsEnabled,keepAliveInitialDelay,checkServerIdentity,validateOptions,appname,auth] 

Zgodnie z komunikatem o błędzie;

the server/replset/mongos options are deprecated, all their options are supported at the top level of the options object 

więc, rozwiązanie problemu jest po prostu przesuwając opcje ustawień z serwera, replset, socketOptions, Mongos i innych opcji hierarchii aż do najwyższego poziomu przedmiotu.

Solution with examples

0

naprawiłem ten problem po prostu za pomocą MongoClient.connect zamiast mongoose.connect

const MongoClient = require('mongodb').MongoClient 

MongoClient.connect(config.uri, (err) => { 
    if (err) { 
     console.log('Could NOT connect to database: ', err); 
    } else { 
     console.log('Connected to database: ' + config.db); 
    } 
});