Mi repositorio de GitHub: https://github.com/safiullah7/legan
Rama: redux
Estoy siguiendo este tutorial: https://tomanagle.medium.com/build-a-rest-api-with-node-js-typescript-mongodb-b6c898d70d61 y no puedo conectarme a mi mongodb. Aquí está mi archivo de código donde intento conectarme con mongodb:
import config from "config"; import log from "../logger"; function connect() { const dbUri = config.get("dbUri") as string; return mongoose .connect(dbUri, { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { log.info("Database connected"); }) .catch((error) => { log.error("db error", error); process.exit(1); }); } export default connect;El compilador da el siguiente error:
No overload matches this call. Overload 1 of 3, '(uri: string, callback: CallbackWithoutResult): void', gave the following error. Argument of type '{ useNewUrlParser: boolean; useUnifiedTopology: boolean; }' is not assignable to parameter of type 'CallbackWithoutResult'. Object literal may only specify known properties, and 'useNewUrlParser' does not exist in type 'CallbackWithoutResult'. Overload 2 of 3, '(uri: string, options?: ConnectOptions | undefined): Promise<typeof import("mongoose")>', gave the following error. Argument of type '{ useNewUrlParser: boolean; useUnifiedTopology: boolean; }' is not assignable to parameter of type 'ConnectOptions'. Object literal may only specify known properties, and 'useNewUrlParser' does not exist in type 'ConnectOptions'.Soy nuevo en mecanografiado y nodo/mongoos. Agradecería su ayuda.
La nueva versión de mongoose (la última versión cuando escribí esta publicación es 6.0.2 ) tiene las siguientes definiciones de tipo para la función connect() .
/** Opens Mongoose's default connection to MongoDB, see [connections docs](https://mongoosejs.com/docs/connections.html) */ export function connect(uri: string, options: ConnectOptions, callback: CallbackWithoutResult): void; export function connect(uri: string, callback: CallbackWithoutResult): void; export function connect(uri: string, options?: ConnectOptions): Promise<Mongoose>; El options object que estás pasando a la función connect()
{ useNewUrlParser: true, useUnifiedTopology: true, } es, por lo tanto, debe tener un tipo de ConnectOptions .
La definición actual de ConnectOptions es la siguiente:
interface ConnectOptions extends mongodb.MongoClientOptions { /** Set to false to [disable buffering](http://mongoosejs.com/docs/faq.html#callback_never_executes) on all models associated with this connection. */ bufferCommands?: boolean; /** The name of the database you want to use. If not provided, Mongoose uses the database name from connection string. */ dbName?: string; /** username for authentication, equivalent to `options.auth.user`. Maintained for backwards compatibility. */ user?: string; /** password for authentication, equivalent to `options.auth.password`. Maintained for backwards compatibility. */ pass?: string; /** Set to false to disable automatic index creation for all models associated with this connection. */ autoIndex?: boolean; /** Set to `true` to make Mongoose automatically call `createCollection()` on every model created on this connection. */ autoCreate?: boolean; } Al observar la nueva definición de connect y ConnectOptions , podemos ver que no hay una definición de useNewUrlParser o useUnifiedTopology dentro de ConnectOptions . Esa es la razón por la que obtuvimos tal error. Puede eliminar las opciones useNewUrlParser: true, y useUnifiedTopology: true, y su código debería poder conectarse a su MongoDB. Si desea pasar algunas opciones a la función connect() , deben seguir la nueva definición de tipo de ConnectOptions .
Puede cambiar su función mongoose.connect a:
mongoose.connect(dbUri, { useNewUrlParser: true, useUnifiedTopology: true, } as ConnectOptions)Esta es la forma más sencilla
ACTUALIZACIÓN: Aclarando esta respuesta como referencia para futuros lectores.
Esta respuesta se aplica si está utilizando Mongoose v6+.
Otras respuestas explican cómo expandir mecanografiado para aceptar useNewUrlParser y otras opciones, lo que resolvería la pregunta original.
Sin embargo, según la documentación de Mongoose, si está utilizando Mongoose v6+, estas opciones ya NO son necesarias, ya que se han incluido como predeterminadas.
Según la guía de migración de Mongoose a la versión 6:
useNewUrlParser, useUnifiedTopology, useFindAndModify y useCreateIndex ya no son opciones compatibles. Mongoose 6 siempre se comporta como si useNewUrlParser, useUnifiedTopology y useCreateIndex fueran verdaderos y useFindAndModify fuera falso. Elimine estas opciones de su código.
https://mongoosejs.com/docs/migrating_to_6.html#no-more-deprecation-warning-options
Por lo tanto, ya no es necesario incluir estas opciones. Me imagino que es por eso que ya no están incluidos en el tipo ConnectOptions.
Si está utilizando una versión anterior de Mongoose, consulte las otras respuestas para saber cómo expandir el tipo ConnectOptions para permitir estas opciones.