首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在asyncData nuxtjs中获取上下文和env变量

如何在asyncData nuxtjs中获取上下文和env变量
EN

Stack Overflow用户
提问于 2019-02-07 03:25:12
回答 1查看 3.5K关注 0票数 2

我在我的nuxt应用程序中创建了一个博客,它从我一直跟踪这个教程的内容中提取数据,现在我可以做到这一点,但是我似乎不能同时获得上下文和环境变量,我设置了从asyncData参数返回。

我创建了一个像这样的json文件。

.contentful.json

代码语言:javascript
复制
{
  "CTF_BLOG_POST_ITEM": "...",
  "CTF_BLOG_POST": "...",
  "CTF_SPACE_ID": "...",
  "CTF_CDA_ACCESS_TOKEN":"..."
}

然后在我的nuxt.config.js

代码语言:javascript
复制
env: {
   CTF_SPACE_ID: config.CTF_SPACE_ID,
   CTF_CDA_ACCESS_TOKEN: config.CTF_CDA_ACCESS_TOKEN,
   CTF_BLOG_POST_ITEM: config.CTF_BLOG_POST_ITEM,
   CTF_BLOG_POST: config.CTF_BLOG_POST
}

现在,基本上在我的组件中,我一直在尝试这样做

代码语言:javascript
复制
asyncData(context, {env}) {
    return Promise.all([
        client.getEntries({
            'content_type': env.CTF_BLOG_POST_ITEM,
            order: '-sys.createdAt'
        })
    ]).then(([posts]) => {
        console.log(context);
        return {
            posts: posts.items
        }
    })
},

但是当我运行这个程序时,我得到了cannot read property CTF_BLOG_POST_ITEM of undefined,如果我从参数中提取上下文--这是有效的,反之亦然--如果我使用{env},则得到上下文。

我怎么能两者兼得??

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 03:47:13

asyncData()的主要(第一个)参数是上下文对象env是上下文对象的属性。您可以以context.env的形式访问它,而无需使用对象重组分配。您的示例可以通过以下方式重写,而无需使用对象重组赋值:

代码语言:javascript
复制
asyncData(context) {
    return Promise.all([
        client.getEntries({
            'content_type': context.env.CTF_BLOG_POST_ITEM,
            order: '-sys.createdAt'
        })
    ]).then(([posts]) => {
        console.log(context);
        console.log(context.env);
        return {
            posts: posts.items
        }
    })
},

签名asyncData(context, {env}) {是不正确的,因为您正在添加第二个参数{env},它不以任何方式引用上述上下文对象。如果您只需要从env中提取context,则可以使用对象重组分配以下列方式提取该属性(正如您在删除第一个参数时提到的那样:

代码语言:javascript
复制
 asyncData({env}) {
    return Promise.all([
        client.getEntries({
            'content_type': context.env.CTF_BLOG_POST_ITEM,
            order: '-sys.createdAt'
        })
    ]).then(([posts]) => {
        console.log(context);
        console.log(context.env);
        return {
            posts: posts.items
        }
    })
},

如果需要其他上下文对象属性,请使用对象析构赋值。Tt看起来如下:

代码语言:javascript
复制
asyncData({env, params, req, res}) {

否则,您只需访问属性(如context.envcontext.params等),只需将context作为第一个/主要参数传递给结构调整。

希望这能帮上忙!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54565842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档