Best practice to use config service in NestJS Module












1















I want to use environment variables to configure the HttpModule per module, from the docs I can use the configuration like this:



@Module({
imports: [HttpModule.register({
timeout: 5000,
maxRedirects: 5,
})],
})


But I don't know what is the best practice to inclue a baseURL from environment vairable (or a config service), for example like this:



@Module({
imports: [HttpModule.register({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
})],


The this.config is undefined here cause it's out of class.



What is the best practice to set baseURL from environment variables (or config service)?










share|improve this question

























  • support for registerAsync has been added, see my edit. :-)

    – Kim Kern
    Jan 25 at 11:41
















1















I want to use environment variables to configure the HttpModule per module, from the docs I can use the configuration like this:



@Module({
imports: [HttpModule.register({
timeout: 5000,
maxRedirects: 5,
})],
})


But I don't know what is the best practice to inclue a baseURL from environment vairable (or a config service), for example like this:



@Module({
imports: [HttpModule.register({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
})],


The this.config is undefined here cause it's out of class.



What is the best practice to set baseURL from environment variables (or config service)?










share|improve this question

























  • support for registerAsync has been added, see my edit. :-)

    – Kim Kern
    Jan 25 at 11:41














1












1








1








I want to use environment variables to configure the HttpModule per module, from the docs I can use the configuration like this:



@Module({
imports: [HttpModule.register({
timeout: 5000,
maxRedirects: 5,
})],
})


But I don't know what is the best practice to inclue a baseURL from environment vairable (or a config service), for example like this:



@Module({
imports: [HttpModule.register({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
})],


The this.config is undefined here cause it's out of class.



What is the best practice to set baseURL from environment variables (or config service)?










share|improve this question
















I want to use environment variables to configure the HttpModule per module, from the docs I can use the configuration like this:



@Module({
imports: [HttpModule.register({
timeout: 5000,
maxRedirects: 5,
})],
})


But I don't know what is the best practice to inclue a baseURL from environment vairable (or a config service), for example like this:



@Module({
imports: [HttpModule.register({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
})],


The this.config is undefined here cause it's out of class.



What is the best practice to set baseURL from environment variables (or config service)?







javascript node.js typescript nestjs






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 '18 at 13:19









Kim Kern

10.3k43150




10.3k43150










asked Nov 22 '18 at 8:15









Siavash AhmadpourSiavash Ahmadpour

204




204













  • support for registerAsync has been added, see my edit. :-)

    – Kim Kern
    Jan 25 at 11:41



















  • support for registerAsync has been added, see my edit. :-)

    – Kim Kern
    Jan 25 at 11:41

















support for registerAsync has been added, see my edit. :-)

– Kim Kern
Jan 25 at 11:41





support for registerAsync has been added, see my edit. :-)

– Kim Kern
Jan 25 at 11:41












1 Answer
1






active

oldest

votes


















3














Update Jan 19



HttpModule.registerAsync() was added in version 5.5.0 with this pull request.



HttpModule.registerAsync({
imports:[ConfigModule],
useFactory: async (configService: ConfigService) => ({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
}),
inject: [ConfigService]
}),




Original Post



This problem was discussed in this issue. For the nestjs modules like the TypeOrmModule or the MongooseModule the following pattern was implemented.



The useFactory method returns the configuration object.



TypeOrmModule.forRootAsync({
imports:[ConfigModule],
useFactory: async (configService: ConfigService) => ({
type: configService.getDatabase()
}),
inject: [ConfigService]
}),


Although Kamil wrote




Above convention is now applied in all nest modules and will be
treated as a best practice (+recommendation for 3rd party modules).
More in the docs




it does not seem to be implemented for the HttpModule yet, but maybe you can open an issue about it. There are also some other suggestions in the issue I mentioned above.



Also have a look at the official docs with best practices on how to implement a ConfigService.






share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426486%2fbest-practice-to-use-config-service-in-nestjs-module%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3














    Update Jan 19



    HttpModule.registerAsync() was added in version 5.5.0 with this pull request.



    HttpModule.registerAsync({
    imports:[ConfigModule],
    useFactory: async (configService: ConfigService) => ({
    baseURL: this.config.get('API_BASE_URL'),
    timeout: 5000,
    maxRedirects: 5,
    }),
    inject: [ConfigService]
    }),




    Original Post



    This problem was discussed in this issue. For the nestjs modules like the TypeOrmModule or the MongooseModule the following pattern was implemented.



    The useFactory method returns the configuration object.



    TypeOrmModule.forRootAsync({
    imports:[ConfigModule],
    useFactory: async (configService: ConfigService) => ({
    type: configService.getDatabase()
    }),
    inject: [ConfigService]
    }),


    Although Kamil wrote




    Above convention is now applied in all nest modules and will be
    treated as a best practice (+recommendation for 3rd party modules).
    More in the docs




    it does not seem to be implemented for the HttpModule yet, but maybe you can open an issue about it. There are also some other suggestions in the issue I mentioned above.



    Also have a look at the official docs with best practices on how to implement a ConfigService.






    share|improve this answer






























      3














      Update Jan 19



      HttpModule.registerAsync() was added in version 5.5.0 with this pull request.



      HttpModule.registerAsync({
      imports:[ConfigModule],
      useFactory: async (configService: ConfigService) => ({
      baseURL: this.config.get('API_BASE_URL'),
      timeout: 5000,
      maxRedirects: 5,
      }),
      inject: [ConfigService]
      }),




      Original Post



      This problem was discussed in this issue. For the nestjs modules like the TypeOrmModule or the MongooseModule the following pattern was implemented.



      The useFactory method returns the configuration object.



      TypeOrmModule.forRootAsync({
      imports:[ConfigModule],
      useFactory: async (configService: ConfigService) => ({
      type: configService.getDatabase()
      }),
      inject: [ConfigService]
      }),


      Although Kamil wrote




      Above convention is now applied in all nest modules and will be
      treated as a best practice (+recommendation for 3rd party modules).
      More in the docs




      it does not seem to be implemented for the HttpModule yet, but maybe you can open an issue about it. There are also some other suggestions in the issue I mentioned above.



      Also have a look at the official docs with best practices on how to implement a ConfigService.






      share|improve this answer




























        3












        3








        3







        Update Jan 19



        HttpModule.registerAsync() was added in version 5.5.0 with this pull request.



        HttpModule.registerAsync({
        imports:[ConfigModule],
        useFactory: async (configService: ConfigService) => ({
        baseURL: this.config.get('API_BASE_URL'),
        timeout: 5000,
        maxRedirects: 5,
        }),
        inject: [ConfigService]
        }),




        Original Post



        This problem was discussed in this issue. For the nestjs modules like the TypeOrmModule or the MongooseModule the following pattern was implemented.



        The useFactory method returns the configuration object.



        TypeOrmModule.forRootAsync({
        imports:[ConfigModule],
        useFactory: async (configService: ConfigService) => ({
        type: configService.getDatabase()
        }),
        inject: [ConfigService]
        }),


        Although Kamil wrote




        Above convention is now applied in all nest modules and will be
        treated as a best practice (+recommendation for 3rd party modules).
        More in the docs




        it does not seem to be implemented for the HttpModule yet, but maybe you can open an issue about it. There are also some other suggestions in the issue I mentioned above.



        Also have a look at the official docs with best practices on how to implement a ConfigService.






        share|improve this answer















        Update Jan 19



        HttpModule.registerAsync() was added in version 5.5.0 with this pull request.



        HttpModule.registerAsync({
        imports:[ConfigModule],
        useFactory: async (configService: ConfigService) => ({
        baseURL: this.config.get('API_BASE_URL'),
        timeout: 5000,
        maxRedirects: 5,
        }),
        inject: [ConfigService]
        }),




        Original Post



        This problem was discussed in this issue. For the nestjs modules like the TypeOrmModule or the MongooseModule the following pattern was implemented.



        The useFactory method returns the configuration object.



        TypeOrmModule.forRootAsync({
        imports:[ConfigModule],
        useFactory: async (configService: ConfigService) => ({
        type: configService.getDatabase()
        }),
        inject: [ConfigService]
        }),


        Although Kamil wrote




        Above convention is now applied in all nest modules and will be
        treated as a best practice (+recommendation for 3rd party modules).
        More in the docs




        it does not seem to be implemented for the HttpModule yet, but maybe you can open an issue about it. There are also some other suggestions in the issue I mentioned above.



        Also have a look at the official docs with best practices on how to implement a ConfigService.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Jan 25 at 11:40

























        answered Nov 22 '18 at 12:21









        Kim KernKim Kern

        10.3k43150




        10.3k43150
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53426486%2fbest-practice-to-use-config-service-in-nestjs-module%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Xamarin.form Move up view when keyboard appear

            Post-Redirect-Get with Spring WebFlux and Thymeleaf

            Anylogic : not able to use stopDelay()