Unable to use API key as env variable with Butter CMS library inside asyncData()










1















I recently converted my site from Drupal to Vue, and it's currently running as a regular Vue app. For SEO (and other reasons), I'm working on converting it to use Nuxt, and I'm having trouble figuring out how to set the private API key as an environment variable and use it in a component with the Butter library and asyncData(). Using the Butter docs for Vue, I have it working fine in a SPA, but I can't get the same thing to work in Nuxt.



In my SPA, I just added API_KEY to dev.env.js, and then I have these two lines in buttercms.js:



import Butter from 'buttercms'
export const butter = Butter(process.env.API_KEY)


and then in my component:



<script>
import butter from "@/buttercms";
...
methods:
getPost()
butter.post.retrieve(this.$route.params.slug)
.then(res =>
this.post = res.data;
)
.catch(res =>
console.log(res);
);

,


which works fine. In Nuxt, I set my API key in nuxt.config.js like so:



env: '1234567890'
,


the same contents for buttercms.js as listed above, and then in my component:



<script>
import butter from "buttercms";
export default {
asyncData(context)
return butter.page
.retrieve("static_page", "about-smga")
.then(res =>
console.log(res.data.data);
return
page: res.data.data
;
)
.catch(res =>
console.log(res);
);
,
...
</script>


However, when I run it, I get an error that says Cannot read property 'page' of undefined, which tells me that the Butter library isn't being used. Obviously I'm doing something wrong, but I'm not sure what. What do I need to change to be able to use butter in my asyncData() call?










share|improve this question


























    1















    I recently converted my site from Drupal to Vue, and it's currently running as a regular Vue app. For SEO (and other reasons), I'm working on converting it to use Nuxt, and I'm having trouble figuring out how to set the private API key as an environment variable and use it in a component with the Butter library and asyncData(). Using the Butter docs for Vue, I have it working fine in a SPA, but I can't get the same thing to work in Nuxt.



    In my SPA, I just added API_KEY to dev.env.js, and then I have these two lines in buttercms.js:



    import Butter from 'buttercms'
    export const butter = Butter(process.env.API_KEY)


    and then in my component:



    <script>
    import butter from "@/buttercms";
    ...
    methods:
    getPost()
    butter.post.retrieve(this.$route.params.slug)
    .then(res =>
    this.post = res.data;
    )
    .catch(res =>
    console.log(res);
    );

    ,


    which works fine. In Nuxt, I set my API key in nuxt.config.js like so:



    env: '1234567890'
    ,


    the same contents for buttercms.js as listed above, and then in my component:



    <script>
    import butter from "buttercms";
    export default {
    asyncData(context)
    return butter.page
    .retrieve("static_page", "about-smga")
    .then(res =>
    console.log(res.data.data);
    return
    page: res.data.data
    ;
    )
    .catch(res =>
    console.log(res);
    );
    ,
    ...
    </script>


    However, when I run it, I get an error that says Cannot read property 'page' of undefined, which tells me that the Butter library isn't being used. Obviously I'm doing something wrong, but I'm not sure what. What do I need to change to be able to use butter in my asyncData() call?










    share|improve this question
























      1












      1








      1








      I recently converted my site from Drupal to Vue, and it's currently running as a regular Vue app. For SEO (and other reasons), I'm working on converting it to use Nuxt, and I'm having trouble figuring out how to set the private API key as an environment variable and use it in a component with the Butter library and asyncData(). Using the Butter docs for Vue, I have it working fine in a SPA, but I can't get the same thing to work in Nuxt.



      In my SPA, I just added API_KEY to dev.env.js, and then I have these two lines in buttercms.js:



      import Butter from 'buttercms'
      export const butter = Butter(process.env.API_KEY)


      and then in my component:



      <script>
      import butter from "@/buttercms";
      ...
      methods:
      getPost()
      butter.post.retrieve(this.$route.params.slug)
      .then(res =>
      this.post = res.data;
      )
      .catch(res =>
      console.log(res);
      );

      ,


      which works fine. In Nuxt, I set my API key in nuxt.config.js like so:



      env: '1234567890'
      ,


      the same contents for buttercms.js as listed above, and then in my component:



      <script>
      import butter from "buttercms";
      export default {
      asyncData(context)
      return butter.page
      .retrieve("static_page", "about-smga")
      .then(res =>
      console.log(res.data.data);
      return
      page: res.data.data
      ;
      )
      .catch(res =>
      console.log(res);
      );
      ,
      ...
      </script>


      However, when I run it, I get an error that says Cannot read property 'page' of undefined, which tells me that the Butter library isn't being used. Obviously I'm doing something wrong, but I'm not sure what. What do I need to change to be able to use butter in my asyncData() call?










      share|improve this question














      I recently converted my site from Drupal to Vue, and it's currently running as a regular Vue app. For SEO (and other reasons), I'm working on converting it to use Nuxt, and I'm having trouble figuring out how to set the private API key as an environment variable and use it in a component with the Butter library and asyncData(). Using the Butter docs for Vue, I have it working fine in a SPA, but I can't get the same thing to work in Nuxt.



      In my SPA, I just added API_KEY to dev.env.js, and then I have these two lines in buttercms.js:



      import Butter from 'buttercms'
      export const butter = Butter(process.env.API_KEY)


      and then in my component:



      <script>
      import butter from "@/buttercms";
      ...
      methods:
      getPost()
      butter.post.retrieve(this.$route.params.slug)
      .then(res =>
      this.post = res.data;
      )
      .catch(res =>
      console.log(res);
      );

      ,


      which works fine. In Nuxt, I set my API key in nuxt.config.js like so:



      env: '1234567890'
      ,


      the same contents for buttercms.js as listed above, and then in my component:



      <script>
      import butter from "buttercms";
      export default {
      asyncData(context)
      return butter.page
      .retrieve("static_page", "about-smga")
      .then(res =>
      console.log(res.data.data);
      return
      page: res.data.data
      ;
      )
      .catch(res =>
      console.log(res);
      );
      ,
      ...
      </script>


      However, when I run it, I get an error that says Cannot read property 'page' of undefined, which tells me that the Butter library isn't being used. Obviously I'm doing something wrong, but I'm not sure what. What do I need to change to be able to use butter in my asyncData() call?







      javascript asynchronous vue.js environment-variables nuxt.js






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 11 '18 at 22:58









      wonder95wonder95

      85831533




      85831533






















          1 Answer
          1






          active

          oldest

          votes


















          0














          You are importing butter class from buttercms module in your component. But its not initialized. You can put your initialization into plugins/buttercms.js and add it into nuxt.config into plugin section.



          import Butter from 'buttercms'

          export default (ctx, inject) =>
          inject('butter', Butter(process.env.API_KEY))



          And then you can reference initialzied instance via this.$butter in your components






          share|improve this answer























          • Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

            – wonder95
            Nov 22 '18 at 6:12











          • @wonder95 you could get it from app. ctx.app.$butter

            – Aldarund
            Nov 22 '18 at 9:28










          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%2f53254092%2funable-to-use-api-key-as-env-variable-with-butter-cms-library-inside-asyncdata%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









          0














          You are importing butter class from buttercms module in your component. But its not initialized. You can put your initialization into plugins/buttercms.js and add it into nuxt.config into plugin section.



          import Butter from 'buttercms'

          export default (ctx, inject) =>
          inject('butter', Butter(process.env.API_KEY))



          And then you can reference initialzied instance via this.$butter in your components






          share|improve this answer























          • Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

            – wonder95
            Nov 22 '18 at 6:12











          • @wonder95 you could get it from app. ctx.app.$butter

            – Aldarund
            Nov 22 '18 at 9:28















          0














          You are importing butter class from buttercms module in your component. But its not initialized. You can put your initialization into plugins/buttercms.js and add it into nuxt.config into plugin section.



          import Butter from 'buttercms'

          export default (ctx, inject) =>
          inject('butter', Butter(process.env.API_KEY))



          And then you can reference initialzied instance via this.$butter in your components






          share|improve this answer























          • Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

            – wonder95
            Nov 22 '18 at 6:12











          • @wonder95 you could get it from app. ctx.app.$butter

            – Aldarund
            Nov 22 '18 at 9:28













          0












          0








          0







          You are importing butter class from buttercms module in your component. But its not initialized. You can put your initialization into plugins/buttercms.js and add it into nuxt.config into plugin section.



          import Butter from 'buttercms'

          export default (ctx, inject) =>
          inject('butter', Butter(process.env.API_KEY))



          And then you can reference initialzied instance via this.$butter in your components






          share|improve this answer













          You are importing butter class from buttercms module in your component. But its not initialized. You can put your initialization into plugins/buttercms.js and add it into nuxt.config into plugin section.



          import Butter from 'buttercms'

          export default (ctx, inject) =>
          inject('butter', Butter(process.env.API_KEY))



          And then you can reference initialzied instance via this.$butter in your components







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 12 '18 at 11:20









          AldarundAldarund

          7,46243460




          7,46243460












          • Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

            – wonder95
            Nov 22 '18 at 6:12











          • @wonder95 you could get it from app. ctx.app.$butter

            – Aldarund
            Nov 22 '18 at 9:28

















          • Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

            – wonder95
            Nov 22 '18 at 6:12











          • @wonder95 you could get it from app. ctx.app.$butter

            – Aldarund
            Nov 22 '18 at 9:28
















          Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

          – wonder95
          Nov 22 '18 at 6:12





          Well, since I'm calling Butter inside of asyncData(), I can't use this, since it's not available yet, and if I try $butter or just leave it as is, I get an error that butter isn't defined.

          – wonder95
          Nov 22 '18 at 6:12













          @wonder95 you could get it from app. ctx.app.$butter

          – Aldarund
          Nov 22 '18 at 9:28





          @wonder95 you could get it from app. ctx.app.$butter

          – Aldarund
          Nov 22 '18 at 9:28



















          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%2f53254092%2funable-to-use-api-key-as-env-variable-with-butter-cms-library-inside-asyncdata%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







          Popular posts from this blog

          𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

          Edmonton

          Crossroads (UK TV series)