Spaces:
Running
Running
# Nestjs + fastapi | |
You can easily call this API from a NestJS microservice. | |
**.env** | |
```env | |
FASTAPI_BASE_URL=http://localhost:8000 | |
SECRET_TOKEN=your_secret_token_here | |
``` | |
**fastapi.service.ts** | |
```typescript | |
import { Injectable } from "@nestjs/common"; | |
import { HttpService } from "@nestjs/axios"; | |
import { ConfigService } from "@nestjs/config"; | |
import { firstValueFrom } from "rxjs"; | |
@Injectable() | |
export class FastAPIService { | |
constructor( | |
private http: HttpService, | |
private config: ConfigService, | |
) {} | |
async analyzeText(text: string) { | |
const url = `${this.config.get("FASTAPI_BASE_URL")}/text/analyse`; | |
const token = this.config.get("SECRET_TOKEN"); | |
const response = await firstValueFrom( | |
this.http.post( | |
url, | |
{ text }, | |
{ | |
headers: { | |
Authorization: `Bearer ${token}`, | |
}, | |
}, | |
), | |
); | |
return response.data; | |
} | |
} | |
``` | |
**app.module.ts** | |
```typescript | |
import { Module } from "@nestjs/common"; | |
import { ConfigModule } from "@nestjs/config"; | |
import { HttpModule } from "@nestjs/axios"; | |
import { AppController } from "./app.controller"; | |
import { FastAPIService } from "./fastapi.service"; | |
@Module({ | |
imports: [ConfigModule.forRoot(), HttpModule], | |
controllers: [AppController], | |
providers: [FastAPIService], | |
}) | |
export class AppModule {} | |
``` | |
**app.controller.ts** | |
```typescript | |
import { Body, Controller, Post, Get } from '@nestjs/common'; | |
import { FastAPIService } from './fastapi.service'; | |
@Controller() | |
export class AppController { | |
constructor(private readonly fastapiService: FastAPIService) {} | |
@Post('analyze-text') | |
async callFastAPI(@Body('text') text: string) { | |
return this.fastapiService.analyzeText(text); | |
} | |
@Get() | |
getHello(): string { | |
return 'NestJS is connected to FastAPI'; | |
} | |
} | |
``` | |