Pesquisa de site

typescript - Argumento do tipo '{ useNewUrlParser: boolean; useUnifiedTopology: boolean}' não é atribuível ao parâmetro do tipo


Estou tentando conectar meu servidor Node.js ao banco de dados Mongo Atlas. Estou usando o mongoose para isso.

await mongoose
      .connect(process.env.MONGO_URI!, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true,
        useFindAndModify: false,
        poolSize: parseInt(process.env.POOL_SIZE!),
      })
      .then((res) => {
        console.log(
          'Connected to Distribution API Database - Initial Connection'
        );
      })
      .catch((err) => {
        console.log(
          `Initial Distribution API Database connection error occured -`,
          err
        );
      });

Minhas dependências relacionadas a isso no arquivo package.json são as seguintes

"dependencies": {
    "@types/mongoose": "5.7.29",
    "mongoose": "5.9.21",
    "typescript": "3.9.5"
  },

Isso estava funcionando antes sem nenhum problema (eu não atualizei as versões do @types/mongoose ou do mongoose de forma alguma) e de repente agora estou recebendo o erro abaixo

Compilation error in /app/src/index.ts
Using ts-node version 8.10.2, typescript version 3.9.5
[ERROR] 16:25:18 ⨯ Unable to compile TypeScript: src/index.ts(59,11): error TS2769: No overload matches this call.
  Overload 1 of 3, '(uris: string, callback: (err: MongoError) => void): Promise<typeof import("mongoose")>', gave the following error.
    Argument of type '{ useNewUrlParser: boolean; useUnifiedTopology: boolean; useCreateIndex: boolean; useFindAndModify: boolean; poolSize: number; }' is not assignable to parameter of type '(err: MongoError) => void'.
      Object literal may only specify known properties, and 'useNewUrlParser' does not exist in type '(err: MongoError) => void'.
  Overload 2 of 3, '(uris: string, options?: ConnectionOptions | undefined): Promise<typeof import("mongoose")>', gave the following error.
    Argument of type '{ useNewUrlParser: true; useUnifiedTopology: true; useCreateIndex: true; useFindAndModify: false; poolSize: number; }' is not assignable to parameter of type 'ConnectionOptions'.
      Object literal may only specify known properties, and 'poolSize' does not exist in type 'ConnectionOptions'

Alguém pode me ajudar com isso?? Agradeço muito qualquer opinião sobre isso.

Obrigado

Resposta #1

Você pode alterar sua função de conexão para

await mongoose
      .connect(process.env.MONGO_URI!, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true,
        useFindAndModify: false,
        poolSize: parseInt(process.env.POOL_SIZE!),
      } as ConnectOptions)
      .then((res) => {
        console.log(
          'Connected to Distribution API Database - Initial Connection'
        );
      })
      .catch((err) => {
        console.log(
          `Initial Distribution API Database connection error occured -`,
          err
        );
      });

Você pode usar isto para importar ConnectOptions

import mongoose, { ConnectOptions } from "mongoose";

Resposta #2

O pacote npm "@types/mongoose" foi descontinuado, pois a versão mais recente do Mongoose publica seus próprios tipos.

https://www.npmjs.com/package/@types/mongoose

Portanto, a versão mais recente do mongoose (6.0.3) não fornece opções de conexão para useNewUrlParser, useCreateIndex, useUnifiedTopology e useFindAndModify.

Para resolver isso, faça o downgrade do mongoose para uma versão mais antiga como 5.13.8, então ele deve funcionar normalmente sem nenhum problema. :)

Artigos relacionados