Estoy tratando de conectarme a MongoDB cuando inicio mi servidor node.js. Mi servidor está en src/server.ts , connectDB() está en src/config/db.ts y mi .env , y environment.d.ts están en el directorio raíz. Sin embargo, cuando intento conectarme a la base de datos, todavía dice que mi MONGO_URI , declarado en .env , es de tipo string | undefined
environment.d.ts :
declare namespace NodeJS { export interface ProcessEnv { PORT?: string; NODE_ENV: 'development' | 'production'; MONGO_URI: string; } } src/server :
import dotenv from 'dotenv'; import express from 'express'; import connectDB from './config/db'; dotenv.config({ path: '../.env' }); connectDB(); const app = express(); ..... src/config/db.ts :
import mongoose from 'mongoose'; const connectDB = async () => { try { const conn = await mongoose.connect(process.env.MONGO_URI, { useUnifiedTopology: true, useNewUrlParser: true, useCreateIndex: true, }); console.log(`MongoDB connected: ${conn.connection.host}`); } catch (error) { console.error(`ERROR: ${error.message}`); process.exit(1); } }; export default connectDB;Código de error completo:
TSError: ⨯ Unable to compile TypeScript: src/config/db.ts:5:41 - error TS2769: No overload matches this call. Overload 1 of 3, '(uri: string, callback: (err: CallbackError) => void): void', gave the following error. Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'. Overload 2 of 3, '(uri: string, options?: ConnectOptions | undefined): Promise<typeof import("mongoose")>', gave the following error. Argument of type 'string | undefined' is not assignable to parameter of type 'string'. Type 'undefined' is not assignable to type 'string'. 5 const conn = await mongoose.connect(process.env.MONGO_URI, { Intenté declarar dotenv.config() dentro de db.ts y eliminar la opción de ruta al declararlo en server.ts . Al pasar el mouse sobre la variable de entorno en VSCode, se muestra (property) NodeJS.ProcessEnv.MONGO_URI: string . Así que realmente pensé que esto estaba bien configurado, pero debo estar perdiendo algo.
Este error puede deberse a las reglas del archivo tsconfig.json. Lo más probable es que se deba a "strictNullChecks": true es posible que haya puesto esta regla en true . Hay dos soluciones simples:
"strictNullChecks": false .! inmediatamente después de process.env.MONGO_URI así: process.env.MONGO_URI! . ¡El símbolo ! le asegura a su transpilador mecanografiado que el valor no será indefinido .Intente agregarlo dentro de un archivo global.d.ts como este
declare global { namespace NodeJS { interface ProcessEnv { PORT?: string; NODE_ENV: 'development' | 'production'; MONGO_URI: string; } } } export {};