Mam klasę opakowania bazy danych, która nawiązuje połączenie z niektórymi instancjami MongoDB:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
To dało mi ostrzeżenie:
(node: 4833) DeprecationWarning: bieżący parser ciągów adresów URL jest przestarzały i zostanie usunięty w przyszłej wersji. Aby użyć nowego analizatora składni, przekaż opcję {useNewUrlParser: true} do MongoClient.connect.
connect()
Sposób przyjmuje MongoClientOptions
przykład, jako drugi argument. Ale nie ma właściwości o nazwieuseNewUrlParser
. Próbowałem również ustawić te właściwości w ciągu połączenia w następujący sposób: mongodb://127.0.0.1/my-db?useNewUrlParser=true
ale nie ma to wpływu na te ostrzeżenia.
Więc jak mogę ustawić useNewUrlParser
aby usunąć te ostrzeżenia? Jest to dla mnie ważne, ponieważ skrypt powinien działać jako cron, a ostrzeżenia te powodują spam spamowy.
Używam mongodb
sterownika w wersji 3.1.0-beta4
z odpowiednim @types/mongodb
pakietem w3.0.18
. Oba są najnowszymi dostępnymi npm install
.
Obejście
Korzystanie ze starszej wersji sterownika mongodb:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
beta
wersji, która jakoś wydała na npm w weekend. Nie przejmuj się nim, dopóki interfejs API nie zostanie faktycznie sfinalizowany. Zrobiłeś dobrze, instalując stabilną wersję.Odpowiedzi:
Sprawdź swoją
mongo
wersję:Jeśli używasz wersji> = 3.1.0, zmień
mongo
plik połączenia na ->lub plik połączenia mangusty do ->
Idealnie jest to funkcja w wersji 4, ale v3.1.0 i nowsze również ją obsługują. Sprawdź szczegóły MongoDB GitHub .
źródło
Jak już wspomniano,
3.1.0-beta4
wydanie sterownika zostało „wypuszczone na wolność” nieco wcześniej. Wydanie jest częścią trwających prac nad obsługą nowszych funkcji w nadchodzącej wersji MongoDB 4.0 i wprowadzeniem innych zmian w interfejsie API.Jedną z takich zmian wywołujących bieżące ostrzeżenie jest
useNewUrlParser
opcja z powodu pewnych zmian dotyczących sposobu, w jaki faktycznie działa przekazywanie identyfikatora URI połączenia. Więcej o tym później.Do czasu, aż wszystko się „uspokoi”, prawdopodobnie wskazane byłoby „przypięcie” przynajmniej do mniejszej wersji
3.0.x
wydań:To powinno powstrzymać instalację
3.1.x
gałęzi w „świeżych” instalacjach modułów węzłów. Jeśli już zainstalowałeś „najnowszą” wersję, która jest wersją „beta”, powinieneś wyczyścić swoje pakiety (ipackage-lock.json
) i upewnić się, że podbijesz to do3.0.x
wersji seryjnej.Jeśli chodzi o korzystanie z opcji „nowego” identyfikatora URI połączenia, głównym ograniczeniem jest włączenie
port
łańcucha połączenia:To jest bardziej „ścisła” reguła w nowym kodzie. Głównym punktem jest to, że bieżący kod jest zasadniczo częścią
mongodb
kodu repozytorium „natywny sterownik węzła” (npm ), a „nowy kod” faktycznie importuje się zmongodb-core
biblioteki, która „stanowi podstawę” „publicznego” sterownika węzła.Dodawaną „opcją” jest „ułatwienie” przejścia przez dodanie opcji do nowego kodu, aby nowszy parser (faktycznie oparty na
url
w kodzie jest używany ) do dodania opcji i wyczyszczenia ostrzeżenia o wycofaniu, a zatem sprawdzenia, czy przekazane parametry połączenia są zgodne z oczekiwaniami nowego analizatora składni.W przyszłych wydaniach parser „starszy” zostałby usunięty, a następnie nowy parser będzie po prostu używany bez opcji. Ale do tego czasu oczekuje się, że cały istniejący kod miał wystarczającą okazję do przetestowania istniejących parametrów połączenia pod kątem tego, czego oczekuje nowy parser.
Jeśli więc chcesz zacząć korzystać z nowych funkcji sterownika w momencie ich wydania, skorzystaj z dostępnych
beta
i kolejnych wydań, a najlepiej upewnij się, że podajesz ciąg połączenia, który jest ważny dla nowego parsera, włączającuseNewUrlParser
opcję wMongoClient.connect()
.Jeśli tak naprawdę nie potrzebujesz dostępu do funkcji związanych z podglądem wersji MongoDB 4.0, przypnij wersję do
3.0.x
serii, jak wspomniano wcześniej. Będzie to działać zgodnie z dokumentacją, a „przypinanie” zapewni, że3.1.x
wydania nie będą „aktualizowane” w stosunku do oczekiwanej zależności, dopóki faktycznie nie chcesz zainstalować stabilnej wersji.źródło
npm install mongodb
skutkowało instalacją „beta” (wyraźnie zaznaczonego w łańcuchu wersji pokazanym w pytaniu), ponieważ był on oznaczony jakstable
w repozytorium npm, kiedy nie powinno być. Był to rzeczywiście błąd w tym czasie i należy go zawsze brać pod uwagę, więc jeśli jakiekolwiek wydanie kodu pokazujące ciąg znakówalpha
lubbeta
w nim zawarte jest podobnie oznaczone jako stabilne. Oczywiście czas minął i jest to cecha w stabilnych wydaniach teraz, aż (jak wspomniano) w końcu zniknie.Poniższy podświetlony kod połączenia mongoose rozwiązał ostrzeżenie dla sterownika mangusty:
źródło
Nie ma nic do zmiany. Przekaż tylko w funkcji połączenia
{useNewUrlParser: true }
.To zadziała:
źródło
Musisz dodać
{ useNewUrlParser: true }
metodę mongoose.connect ().źródło
Format ciągu połączenia musi być mongodb: // użytkownik: hasło @ host: port / db
Na przykład:
źródło
MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } )
działa.Musisz tylko ustawić następujące rzeczy przed połączeniem z bazą danych, jak poniżej:
Również,
źródło
correct
jakby zadziałało dla ciebie. Dla mnie też zadziałało!Poniższe działa dla mnie
mongoose
Wersja jest5.8.10
.źródło
body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
Nie sądzę, że musisz dodać
{ useNewUrlParser: true }
.To, czy chcesz już korzystać z nowego parsera adresów URL, zależy od Ciebie. Ostatecznie ostrzeżenie zniknie, gdy MongoDB przełączy się na nowy parser adresów URL.
Jak określono w formacie URI ciągu połączenia , nie trzeba ustawiać numeru portu.
Wystarczy dodanie
{ useNewUrlParser: true }
.źródło
useNewUrlParser: true
ostrzeżenie zniknie. Ale to trochę głupie, ponieważ ten dodatkowy parametr stanie się przestarzały, gdy mongo przełączy się na nowy parser adresów URL.Zaktualizowano dla ECMAScript 8 / czekaj
Nieprawidłowy kod demonstracyjny ECMAScript 8 MongoDB inc również tworzy to ostrzeżenie.
MongoDB zawiera następujące porady, które są niepoprawne
Może to spowodować następujący błąd:
Zamiast tego należy podać opcję
new MongoClient
:Zobacz poniższy kod:
źródło
Problem można rozwiązać, podając numer portu i używając tego analizatora składni:
{useNewUrlParser: true}
Rozwiązaniem może być:
To rozwiązuje mój problem.
źródło
useNewUrlParser property
wconnect
, ale rozwiązanie pomogło. więc głosowałem!Pełny przykład Express.js, przypadku wywołania API i wysyłania treści JSON jest następujący:
źródło
Oto jak to mam. Wskazówka nie pojawiła się na mojej konsoli, dopóki kilka dni wcześniej nie zaktualizowałem npm.
.connect ma trzy parametry: identyfikator URI, opcje i err.
źródło
Używaliśmy:
→ Daje to błąd analizatora składni adresu URL
Prawidłowa składnia to:
źródło
Musisz tylko dodać
wewnątrz metody mongoose.connect.
źródło
Poniższa praca dla mnie dla wersji 5.9.16
źródło
Te wiersze pomogły również w przypadku wszystkich innych ostrzeżeń o wycofaniu:
źródło
Korzystałem z mlab.com jako bazy danych MongoDB. Oddzieliłem ciąg połączenia do innego folderu o nazwie
config
i wewnątrz pliku klucze.js Zachowałem ciąg połączenia, który był:A kod serwera był
Musisz napisać {useNewUrlParser: true} po łańcuchu połączenia, tak jak powyżej.
Mówiąc najprościej, musisz zrobić:
źródło
Używam mangusty w wersji 5.x do mojego projektu. Po wymaganiu pakietu mangusty ustaw wartość globalną jak poniżej.
źródło
Jeśli
username
lubpassword
ma@
postać, użyj jej w następujący sposób:źródło