NestJS中使用Morgan报错:TypeError: (0 , morgan_1.default) is not a function
NestJS中使用Morgan日志中间件报错:TypeError: (0 , morgan_1.default) is not a function
问题详情
尝试在NestJS REST API中集成Morgan请求日志时触发如下错误:
上下文信息
相关日志中间件文件路径:/src/middlewares/request-logging.ts
项目入口文件main.ts代码:
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import { useRequestLogging } from './middleware/request-logging'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.setGlobalPrefix('api'); app.enableCors(); useRequestLogging(app); await app.listen(3000); } bootstrap();
错误信息
TypeError: (0 , morgan_1.default) is not a function
日志中间件代码(request-logging.ts)
import { Logger } from '@nestjs/common'; import morgan from 'morgan' import { format } from 'morgan'; export function useRequestLogging(app) { const logger = new Logger('Request'); app.use( morgan('tiny', { stream: { write: (message) => logger.log(message.replace('\n', '')), }, }), ); }
解决方案
报错原因是Morgan的ES模块导入方式不正确,可通过以下两种方式修复:
方式1:导入整个Morgan模块
将import morgan from 'morgan'替换为:
import * as morgan from 'morgan';
Morgan的ES模块采用集合式命名导出,默认导入无法直接获取可调用的函数,通过* as导入整个模块后即可正常调用。
方式2:显式导入默认导出
如果偏好默认导入写法,可改为:
import { default as morgan } from 'morgan';
修复后的完整request-logging.ts示例:
import { Logger } from '@nestjs/common'; import * as morgan from 'morgan'; export function useRequestLogging(app) { const logger = new Logger('Request'); app.use( morgan('tiny', { stream: { write: (message) => logger.log(message.replace('\n', '')), }, }), ); }
内容的提问来源于stack exchange,提问作者Pedro Santos
相关产品推荐
相关产品推荐

