El código en mi aplicación es así.
import { HttpExceptionFilter } from './common/exceptions/http-exception.filter'; import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { ValidationPipe } from '@nestjs/common'; import { DocumentBuilder, OpenAPIObject, SwaggerModule } from '@nestjs/swagger'; //1. import * as expressBasicAuth from 'express-basic-auth'; //2. //import expressBasicAuth from 'express-basic-auth'; => promise unhandled error async function bootstrap() { const app = await NestFactory.create(AppModule); app.useGlobalPipes(new ValidationPipe()); app.useGlobalFilters(new HttpExceptionFilter()); app.use( ['/docs', '/docs-json'], expressBasicAuth({ challenge: true, users: { [process.env.SWAGGER_USER]: process.env.SWAGGER_PASSWORD, }, }), ); };Quiero saber la diferencia entre 1 y 2.
Porque cuando ejecuto mi aplicación usando 2 (9 líneas), hubo un error no controlado de promesa.
Quiero saber cómo funcionan esas dos formas. Me referí al documento oficial de mozilla, pero no pude entenderlo bien. Agradecería si pudieras responderme.
Primero, entendamos cómo funcionan las importaciones.
así que considere que tengo un archivo con las siguientes exportaciones
// file name -> modules export const add = (x, y) => x + y; export const subtract = (x, y) => x - y; export default (x, y) => x * y;ahora puedo importar todas estas funciones en otro archivo como este
import defaultFunction, { add, subtract } from './modules.js'; console.log(add(1, 2)) // 3 console.log(subtract(2, 1)) // 1 console.log(defaultFunction(2, 2)) // 2 * 2 = 4 o puedo usar import * as <name> from <file/package> para importar todas las exportaciones dentro de un archivo.
como esto
import * as myModules from './modules.js'; // NOTE: this will only give you add and subtract functions but not the default one // now to actually access the default function you have to use // import * as <name> from <file/package> // <name>.default to access the default export // or simply // import default, { } from <file/package> console.log(myModules.add(1, 2)) // 3 console.log(myModules.subtract(2, 1)) // 1 console.log(myModules.default(2, 2)) // 2 * 2 = 4 // or i can destructure the "myModules" import const { add, subtract } = myModules;Conclusión
Creo que el problema es que la biblioteca que está utilizando no proporciona una exportación predeterminada para usar import expressBasicAuth from 'express-basic-auth'; o podría estar exportando diferentes funciones para exportaciones con named exports y default exports
Según su código:
import * as expressBasicAuth from ...
Importa todo export const variable1...; export const variable2...; elementos como un solo elemento.
import expressBasicAuth from ...
Importa un solo elemento export default si había uno definido dentro de la biblioteca.
Dependiendo de la implementación de la biblioteca, puede haber funciones totalmente diferentes exportadas de esas dos formas.
La mayoría de las veces, el módulo exporta varias cosas. Hay dos excelentes formas de importar desde otro módulo cuando el módulo exporta un objeto con propiedades. Este es el caso común.
Importe todo el módulo, dándole un nombre:
import * as child_process from "child_process"; // then later... child_process.spawn(...); or pick the names you want to import: import { spawn } from "child_process"; // then later spawn(...);a veces el módulo exporta solo una cosa. mecanografiado tiene el concepto de exportación predeterminada Si un módulo declara una exportación predeterminada, debe traerla de esta manera:
import thing from "thing";Ahora tiene una función o una clase (cualquiera que sea su exportación predeterminada) en la cosa.
Más comúnmente en los módulos de JavaScript (¿CommonJS?), el autor de un módulo anulará module.exports a una función o clase en lugar de agregar propiedades al objeto de exportaciones como lo haría un módulo ES.
entonces en común js tenemos
const expressBasicAuth = require(express-basic-auth);y en mecanografiado:
import * as expressBasicAuth from 'express-basic-auth';