首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >“无法读取未定义的属性'page‘”- Gatsby和Prismic正在为gatsby-node中的模板创建分页

“无法读取未定义的属性'page‘”- Gatsby和Prismic正在为gatsby-node中的模板创建分页
EN

Stack Overflow用户
提问于 2019-10-03 14:34:38
回答 2查看 791关注 0票数 0

我希望有人遇到了类似的事情,并能给我一些正确的方向的建议。

我正在使用gatsby创建一个博客,其中的内容来自于棱镜。每篇博客文章都有一个作者和标签,通过棱镜内容关系与它们相关。我的目标是通过gatsby-node为作者和标签页面动态创建页面,这些页面还包括相关博客文章的分页。不幸的是,Prismic似乎不能创建双向的关系,所以我必须通过在我的allPrismicBlog上对author uid进行graphql查询来查找相关的博客帖子。

我尝试完成的urls示例: myblog.com/author/author-name/ myblog.com/author/author-name/2

我的gatsby节点中包含以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions;
const authors = await graphql(`
    {
      allPrismicAuthor {
        edges {
          node {
            uid
          }
        }
      }
    }
  `);
  authors.data.allPrismicAuthor.edges.forEach(edge => {
    const authorUid = edge.node.uid;
    const authorPosts = graphql(`
    {
      allPrismicBlog(filter: { data: { author: { uid: { eq: ${authorUid} } } } }) {
        edges {
          node {
            uid
        }
      }
    }
    `);
    const numAuthorPages = Math.ceil(authorPosts.length / 2);
    Array.from({ length: numAuthorPages }).forEach((_, i) =>
      createPage({
        path: i === 0 ? `/author/${authorUid}` : `/author/${authorUid}/${i + 1}`,
        component: path.resolve('./src/templates/author.jsx'),
        context: {
          limit: 2,
          skip: i * 2,
          numPages,
          currentPage: i + 1,
          uid: authorUid,
        },
      }),
    );
  });
};

我收到错误TypeError: Cannot read property 'page' of undefined

我不确定我在这里尝试做的是不是正确的方向,或者我是否错过了一些重要的东西。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2019-10-03 15:12:39

上面的代码没有显示任何页面变量。

也许这样可以帮助我从整体上看到代码?

也许您事先忘记了定义page变量

票数 0
EN

Stack Overflow用户

发布于 2019-10-04 16:43:50

找出了一个解决方案,并想在这里分享,以防其他人在未来遇到类似的事情。

我没有尝试使用作者的uid查询博客文章,也没有处理这两个查询的异步特性,而是过滤blogList并基于它创建页面。可能有几种方法可以在重构期间改进这段代码,但我想分享我的工作成果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const blogList = await graphql(`
    {
      allPrismicBlog(sort: { fields: [data___blog_post_date], order: DESC }, limit: 1000) {
        edges {
          node {
            uid
            data {
              author {
                uid
              }
              tag {
                uid
              }
            }
          }
        }
      }
    }
  `);

 const posts = blogList.data.allPrismicBlog.edges;

const authors = await graphql(`
    {
      allPrismicAuthor {
        edges {
          node {
            uid
          }
        }
      }
    }
  `);

  authors.data.allPrismicAuthor.edges.forEach(edge => {
    const authorUid = edge.node.uid;

    const authorBlogs = posts.filter(post => post.node.data.author.uid === authorUid);
    const numAuthorPages = Math.ceil(authorBlogs.length / 1);

    for (let i = 0; i <= numAuthorPages; i++) {
      createPage({
        path: i === 0 ? `/author/${authorUid}` : `/author/${authorUid}/${i + 1}`,
        component: pageTemplates.Author,
        context: {
          limit: 1,
          skip: i * 1,
          numPages,
          currentPage: i + 1,
          uid: authorUid,
        },
      });
    }
  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58221403

复制
相关文章
分页Page对象
发表于2016-05-262019-01-01 作者 wind /** * 分页对象,包含页码,每页条数,总条数 User: yangyan Date: 13-11-18 Time: 下午8:59 To change this * template use File | Settings | File Templates. */ public class Page implements Serializable { private static final long serialVer
前Thoughtworks-杨焱
2021/12/07
9640
ThinkPHP page分页类的学习
实例化数据对象 1.$user=M('user'); 查询总记录数 $count = $user->count();//直接读取数据表中条项总数 //或者有查询条件 $count = $user->where(查询条件)->count();//查询满足查询条件的条目数 实例化分页类 1.$Page = new \Think\Page($count, 10); 按照限定的条数,从数据库中读取相应数量的条数 如下,filed()指定从数据库中取出id,title,tit
benny
2018/03/06
1.5K0
ThinkPHP page分页类的学习
Mybatis实现分页-分页类的模板(最基础的模板)
我用的是lombok 你也可以不用去建立Get和Set方法 我的lombok maven坐标如下:
用户9006224
2022/12/21
4960
Gatsby入门指南—添加上一页下一页功能(完结篇)
到此,通过gatsby就快速的搭建了一个博客网站,我们只需书写markdown文件就能生成对应的网页了。至于网页美化,那是切图的事儿,我就不在这里墨迹了。
前端大彬哥
2019/05/29
9230
Gatsby入门指南—添加上一页下一页功能(完结篇)
到此,通过gatsby就快速的搭建了一个博客网站,我们只需书写markdown文件就能生成对应的网页了。至于网页美化,那是切图的事儿,我就不在这里墨迹了。
前端大彬哥
2019/05/29
9330
AJAX 中创建 XMLHttpRequest 对象的方法和常用属性、方法
AJAX(Asynchronous JavaScript and XML)是一种用于在网页上进行异步数据交互的技术。通过 AJAX,我们可以在不重新加载整个网页的情况下,与服务器进行数据交换并更新部分页面内容。在实现 AJAX 的过程中,创建一个 XMLHttpRequest 对象是必不可少的。
网络技术联盟站
2023/07/07
4760
java中page的对象,page对象[通俗易懂]
page对象是JSP九大内置对象之一。JSP全称JavaServerPage,是一种动态网页技术标准,以Java语言作为脚本语言。在JSP中预先定义了九个内置对象,这个九个内置对象不需要声明就可以在脚本代码和表达式中任意使用,九个内置对象分别是:request、response、session、application、out、pageContext、config、page、exception。
全栈程序员站长
2022/09/18
2.4K0
java中page的对象,page对象[通俗易懂]
Spring Boot中读取配置属性的几种方式
  本文介绍Spring Boot中读取配置属性的几种方式,项目示例中用到的application.yml和application.properties定义如下:
happyJared
2018/09/20
8.3K0
Spring Boot中读取配置属性的几种方式
C 和 C++ 中的未定义行为
theme: channing-cyan highlight: a11y-dark
鲸落c
2022/11/14
4.4K0
C#反射读取和设置类的属性
http://www.cnblogs.com/william-lin/archive/2013/06/05/3118233.html
跟着阿笨一起玩NET
2018/09/19
2K0
page指令的用法,重要属性是什么?
i) import="package.class",或者import="package.class1,...,package.classN":
马克java社区
2021/07/12
8010
用 Gatsby 创建一个博客
Gatsby 是一个令人难以置信的静态站点生成器,它允许使用React作为渲染引擎引擎来搭建一个静态站点,它真正具有现代web应用程序所期望的所有优点。它通过在构建时通过服务器端渲染将动态的 react 组件呈现为静态 HTML 内容。这意味着您的用户可以获得静态站点的所有好处,比如不使用JavaScript、搜索引擎友好性、非常快的加载速度等等,也并没有失去现代web所期望的活力和交互性。一旦呈现为静态 HTML,客户端站点的React和JavaScript会接管它并添加动态的内容。 Gatsby 最近发布了v1.0.0,推出了很多新特性。包括(但不限于)使用GraphQL创建内容查询的能力,与各种cms集成——包括WordPress、Contentful、Drupal等等。还有基于路由的代码分布使得用户体验更佳。在这篇文章中,我们将深入探讨 Gatsby 和一些新特性,并创建一个静态博客。让我们开始吧!
疯狂的技术宅
2019/03/27
2.5K0
用 Gatsby 创建一个博客
分享我的CleanArchitecture for Razor Page项目模板
这个项目是参考和整合了jasontaylordev/CleanArchitecture 和 blazorhero/CleanArchitecture 代码基础上,重构出来的新的项目,这两个项目都是非常优秀和人气很旺的关于CleanArchitecture的项目模板,我也fork了他们的项目并添加了一些自己的功能模块,我个人非常喜欢blazorhero/CleanArchitecture这个项目,前端使用的是微软的Blazor(webassembly)技术,对于.net开发人员可以很快开始工作,几乎不需要额外的学习,但在项目的进行中发现了一个致命的问题就是在(WASM模式下)性能不行,加载数据一多就容易的卡顿,但相信后面会得到优化,jasontaylordev/CleanArchitecture 项目的前端用的Angular12 由于我对angular/vue/react的技术不是很熟练,学习起来实在是感觉力不从心,在实际开发过程中遇到了很多坑,都需要用google来解决,所以最后我还是选择了自己最熟悉的开发方式asp.net MVC来对我原来的框架进行重构来实现CleanArchitecture设计模式。
阿新
2021/08/19
8960
分享我的CleanArchitecture for Razor Page项目模板
velocity分页模板
以前用后台java拼接分页代码,不利于修改。找到一份velocity模板。 1 <!-- 分页模板 --> 2 #macro(pager $url $pager) 3 <url class="page"> 4 #set($FRONT_LEN = 3) 5 #set($BEHIND_LEN = 3) 6 #set($PAGER_LEN = 7) 7 #set($last = $!{pager.pageNumber} - 1) 8 #se
Ryan-Miao
2018/03/13
1K0
TypeScript中的可选属性和只读属性
可选属性 接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在。 例如给函数传入的参数对象中只有部分属性赋值了。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面
孙亖
2018/06/07
2.9K0
2022 年10个优质的 Node.js CMS 平台分享
内容管理系统 (「CMS」) 使没有强大技术背景的人也能够轻松发布内容。我们可以使用 「CMS」 来管理我们的内容和交付。市面上有不同类型的 「CMS」,它们执行不同的目的并具有不同的功能。
徐小夕
2022/02/09
4.6K0
2022 年10个优质的 Node.js CMS 平台分享
Java-方法重载时 调用未定义的对象属性
public class TestWayReload { int id; String name; String pwd; public TestWayReload(){ System.out.println(“Hellow World!”); System.out.println("################"); }
Fisherman渔夫
2019/07/30
5.5K0
opencv无法读取图片_opencv无法读取图片
使用一下代码读取一张图片失败(不管是绝对路径还是相对路径,都失败),工程运行都没问题,就是图片读取失败。
全栈程序员站长
2022/11/04
2.4K0
Linux系统中的Page cache和Buffer cache
Mem:表示物理内存统计。 total:表示物理内存总量(total = used + free)。 used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。 buffers:系统分配但未被使用的buffers数量。 cached:系统分配但未被使用的cache数量。 -/+ buffers/cache:表示物理内存的缓存统计。 used2:也就是第一行中的used – buffers - cached也是实际使用的内存总量。 // used2为第二行 free2 = buffers1 + cached1 + free1 // free2为第二行,buffers1等为第一行 free2:未被使用的buffers与cache和未被分配的内存之和,这就是系统当前实际可用内存。 Swap:表示硬盘上交换分区的使用情况。
JavaEdge
2021/10/18
1.9K0
点击加载更多

相似问题

“无法读取未定义的属性'node‘”- Gatsby/GraphQL/Prismic

216

TypeError:无法读取Gatsby中未定义的.src/page/index.js的属性“数据”

10

Gatsby: gatsby源-graphql:无法读取未定义的属性“createPageDependency”

10

用Gatsby和模板分页

10

无法读取Gatsby、Contentful和Graphql中未定义图像的属性?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文