@luxury-presence/nestjs-liveby v1.1.0
@luxurypresence/nestjs-liveby
LiveBy module for for Nest based on the LiveBy's api.
Installation
$ npm i --save @luxury-presence/nestjs-liveby @nestjs/axios rxjsUsage
Import LiveByModule:
@Module({
imports: [LiveByModule.register({
apiKey: 'LIVEBY_API_KEY',
clientId: 'LIVEBY_CLIENT_ID',
baseApi: 'LIVEBY_BASE_API',
})],
providers: [...],
})
export class SearchModule {}Inject LiveByService:
@Injectable()
export class SearchService {
constructor(private readonly liveByService: LiveByService) {}
async findWalkScores(lat: number, lon: number): Promise<WalkScores> {
return this.liveByService.findWalkScores(lat, lon);
}
async findAreaOfInterest(
lat: number,
lon: number
): Promise<AreaOfInterest[]> {
return this.liveByService.findAreasOfInterest(lat, lon);
}
}Async options
Quite often you might want to asynchronously pass your module options instead of passing them beforehand. In such case, use registerAsync() method, that provides a couple of various ways to deal with async data.
1. Use factory
LiveByModule.registerAsync({
useFactory: () => ({
apiKey: 'LIVEBY_API_KEY',
clientId: 'LIVEBY_CLIENT_ID',
baseApi: 'LIVEBY_BASE_API',
}),
});Obviously, our factory behaves like every other one (might be async and is able to inject dependencies through inject).
LiveByModule.registerAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
apiKey: configService.get('LIVEBY_API_KEY'),
clientId: configService.get('LIVEBY_CLIENT_ID'),
baseApi: configService.get('LIVEBY_BASE_API'),
}),
inject: [ConfigService],
}),2. Use class
LiveByModule.registerAsync({
useClass: LiveByConfigService,
});Above construction will instantiate LiveByConfigService inside LiveByModule and will leverage it to create options object.
class LiveByConfigService implements LiveByModuleOptionsFactory {
createLiveByModuleOptions(): LiveByModuleOptions {
return {
apiKey: 'LIVEBY_API_KEY',
clientId: 'LIVEBY_CLIENT_ID',
baseApi: 'LIVEBY_BASE_API',
};
}
}3. Use existing
LiveByModule.registerAsync({
imports: [ConfigModule],
useExisting: ConfigService,
}),It works the same as useClass with one critical difference - LiveByModule will lookup imported modules to reuse already created ConfigService, instead of instantiating it on its own.