NestJS 프로젝트에서 http-proxy
모듈을 사용하는 중 다음과 같은 TypeScript 에러가 발생했습니다:
src/eap/upload/upload.controller.ts:10:29 - error TS2305: Module '"http-proxy"' has no exported member 'ProxyServer'.
10 import { createProxyServer, ProxyServer } from 'http-proxy';
~~~~~~~~~~~
node_modules/http-proxy/lib/http-proxy.js
파일을 확인한 결과, ProxyServer
는 named export(명명된 내보내기)로 제공되지 않고 있습니다. 대신, 모듈 자체가 ProxyServer
클래스로 export되고 있습니다.
// node_modules/http-proxy/lib/http-proxy.js 파일 내용
var ProxyServer = require('./http-proxy/index.js').Server;
// ...
ProxyServer.createProxyServer = createProxyServer;
ProxyServer.createServer = createProxyServer;
ProxyServer.createProxy = createProxyServer;
/**
* Export the proxy "Server" as the main export.
*/
module.exports = ProxyServer;
import * as httpProxy from 'http-proxy';
// 클래스 정의
private readonly proxy: httpProxy;
constructor(...) {
// ...
this.proxy = httpProxy.createProxyServer({
// ...
});
}
import { createProxyServer } from 'http-proxy';
import * as httpProxy from 'http-proxy';
// 타입 정의
private readonly proxy: httpProxy;
constructor(...) {
// ...
this.proxy = createProxyServer({
// ...
});
}
@types/http-proxy
패키지를 설치하면 타입 정의가 추가될 수 있습니다:
npm install --save-dev @types/http-proxy
// 수정 전 (에러 발생)
import { createProxyServer, ProxyServer } from 'http-proxy';
// 수정 후 (정상 동작)
import * as httpProxy from 'http-proxy';
import { createProxyServer } from 'http-proxy';
// 타입 선언 부분
private readonly proxy: httpProxy;
NestJS 컨트롤러의 전체 수정된 코드는 기존 기능을 그대로 유지하면서 TypeScript 에러를 해결합니다.
http-proxy
모듈은 CommonJS 방식으로 작성되어 있어 TypeScript의 ES 모듈 시스템과 임포트 방식에서 차이가 있습니다.