#Cannot register cron job "XXXXXService@updateHomePage" because it is defined in non static provider

1 messages · Page 1 of 1 (latest)

vocal wolf
#

Getting this error while injecting a service defined in some other module

#

this is my code for cron service -> @Injectable()
export class HomepageService {

constructor(
    @InjectModel(HomePage.name, 'elekore_app') private readonly homePageModel: Model<HomePageDocument>,
    @InjectModel(HomePageBanner.name, 'elekore_app') private readonly homePageBannerModel: Model<HomePageBannerDocument>,
    private readonly newsService : NewsService
) { }

@Cron('1 * * * * *')
updateHomePage() {
    //get homePage Banner
    //get top 5 news by source Elekore Energy
    this.getBanners()
}

getBanners = () =>{
    return new Promise((resolve, reject)=>{
        this.homePageBannerModel.find({}, {}).then((result) => {
            console.log(result)
        }).catch((err) => {
            
        });
    })
    
}

}

remote socketBOT
#

Please format your question or answer with Markdown formatting.
It leads to better readability and an easier time to spot problems.
For code blocks, you can wrap your block with three back ticks before and after the block, and after the first three back ticks you can add a language (like ts) to add syntax highlighting.

```ts
@Injectable()
export class MySuperAwesomeService {

constructor(@Inject('InjectionToken') private readonly dep: SomeDependency) {}

getRandomNumber(): number {
return Math.round(Math.random() * 1000);
}
}
```

That ☝️, becomes this 👇

@Injectable()
export class MySuperAwesomeService {

  constructor(@Inject('InjectionToken') private readonly dep: SomeDependency) {}

  getRandomNumber(): number {
    return Math.round(Math.random() * 1000);
  }
}
vocal wolf
#
@Injectable()
export class HomepageService {

    constructor(
        @InjectModel(HomePage.name, 'elekore_app') private readonly homePageModel: Model<HomePageDocument>,
        @InjectModel(HomePageBanner.name, 'elekore_app') private readonly homePageBannerModel: Model<HomePageBannerDocument>,
        private readonly newsService : NewsService // when injecting this service getting the error mentioned in subject line
    ) { }

    @Cron('1 * * * * *')
    updateHomePage() {
        //get homePage Banner
        //get top 5 news by source Elekore Energy
        this.getBanners()
        this.newsService.getTopNews()
    }
    getBanners = () =>{
        return new Promise((resolve, reject)=>{
            this.homePageBannerModel.find({}, {}).then((result) => {
                resolve(result)
            }).catch((err) => {
                console.log(err.stack)
            });
        })
    }
}
signal glacier
#

The service is request-scoped, or depends on an request-scoped provider. These cannot be used in Crons (and some other types of providers, like websocket gateways), because there is no request at the time of execution.

vocal wolf
signal glacier
#

If the service depends on the request, then how do you suppose to use it inside your cron?

#

If it may depend on the request, but does not necessarily in this situation, then find a way to split it in two.