NestJS Undici is a powerful HTTP client module for NestJS applications, built on top of @nodejs/undici. It provides a simple and efficient way to make HTTP requests in your NestJS applications.
- 🚀 Built on top of @nodejs/undici
- 🔄 Full TypeScript support
- ⚡ High-performance HTTP client
- 🔒 Secure by default
- 🛠️ Easy to configure and use
- 📦 Lightweight and dependency-free
- 📝 Comprehensive documentation
# Using npm
npm install nestjs-undici
# Using yarn
yarn add nestjs-undici- Import the
HttpModulein your root module:
import { Module } from '@nestjs/common';
import { HttpModule } from 'nestjs-undici';
@Module({
imports: [
HttpModule.register({
// Optional configuration (Undici Request Options)
headers: {
'User-Agent': 'NestJS-Undici',
},
}),
],
})
export class AppModule {}- Inject and use the
HttpServicein your service:
import { Injectable } from '@nestjs/common';
import { HttpService } from 'nestjs-undici';
import { lastValueFrom } from 'rxjs';
@Injectable()
export class AppService {
constructor(private readonly httpService: HttpService) {}
async getUsers() {
const response = await lastValueFrom(
this.httpService.request('https://api.example.com/users')
);
return response.body.json();
}
}The HttpModule can be configured using the register or registerAsync methods. The configuration object accepts standard Undici Request Options and an optional dispatcher.
import { Agent } from 'undici';
HttpModule.register({
headers: {
'Content-Type': 'application/json',
},
// You can set a custom dispatcher (e.g., for proxy or mocking)
dispatcher: new Agent({
connect: {
timeout: 5000
}
}),
});HttpModule.registerAsync({
useFactory: async (configService: ConfigService) => ({
headers: {
'Authorization': await configService.get('API_KEY'),
},
}),
inject: [ConfigService],
});// POST request
const response = await lastValueFrom(
this.httpService.request('https://api.example.com/users', {
method: 'POST',
body: JSON.stringify({ name: 'John Doe' }),
})
);To intercept requests or configure advanced behavior (like connection pools, proxies, or mocks), use a custom Dispatcher.
import { Injectable } from '@nestjs/common';
import { HttpService } from 'nestjs-undici';
import { ProxyAgent } from 'undici';
@Injectable()
export class AppService {
constructor(private readonly httpService: HttpService) {
// Set a global dispatcher for this service instance
this.httpService.setGlobalDispatcher(new ProxyAgent('http://my-proxy:8080'));
}
}For detailed API documentation, please visit our documentation site.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
If you find this package useful, please consider giving it a ⭐️ on GitHub.