Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphql 如何在GATSBY.js中获取博客文章的“最后更新日期”_Graphql_Gatsby - Fatal编程技术网

Graphql 如何在GATSBY.js中获取博客文章的“最后更新日期”

Graphql 如何在GATSBY.js中获取博客文章的“最后更新日期”,graphql,gatsby,Graphql,Gatsby,你好,我不是开发人员,所以这个问题对你们来说很简单。我用的是盖茨比网站上的先发制人。该博客工作完美,但我需要提供我的标题下的最后更新时间。寻找一些解决办法,但没有一个奏效。你能提供一些帮助吗 gatsby-node.js exports.onCreateNode = ({ node, getNode, actions }) => { const { createNodeField } = actions; if (node.internal.type !== 'MarkdownRe

你好,我不是开发人员,所以这个问题对你们来说很简单。我用的是盖茨比网站上的先发制人。该博客工作完美,但我需要提供我的标题下的最后更新时间。寻找一些解决办法,但没有一个奏效。你能提供一些帮助吗

gatsby-node.js

exports.onCreateNode = ({ node, getNode, actions }) => {
  const { createNodeField } = actions;
  if (node.internal.type !== 'MarkdownRemark') {
    return;
  }
  const fileNode = getNode(node.parent);
  createNodeField({
    node,
    name: 'modifiedTime',
    value: fileNode.mtime
  });
};




`````````````````````````
PostListing.jsx




class PostListing extends React.Component {
  getPostList() {
    const postList = [];
    this.props.postEdges.forEach(postEdge => {
      postList.push({
        path: postEdge.node.fields.slug,
        tags: postEdge.node.frontmatter.tags,
        cover: postEdge.node.frontmatter.cover,
        title: postEdge.node.frontmatter.title,
        date: postEdge.node.fields.date,
        excerpt: postEdge.node.excerpt,
        timeToRead: postEdge.node.timeToRead,
        modifiedTime:postEdge.node.modifiedTime
      });
    });
    return postList;
  }
  render() {
    const postList = this.getPostList();
    return (
      <div className='posts'>
        {/* Your post list here. */
        postList.map(post => (
          <Fragment>    
              <div className='singlePost__date'>
                <h4 style={{color:'white'}}>  {post.modifiedTime}</h4>
              </div>
              <div className='singlePost__Title'>
              <Link classname='singlePost' to={post.path} key={post.title}>
                    <h1 className='singlePost__title'>{post.title}</h1>
              </Link> 
              </div>

          </Fragment>

        ))}
      </div>
    );
  }
}

export default PostListing;

I expect something like 

TITLE
last updated : 3/2/2019
编辑:下面的答案实际上是错误的,因为文件。modifiedTime是标记文件本身的modifiedTime,而不是内容的modifiedTime。例如,如果您将博客部署在Netlify上,那么其中文件的修改时间将与本地环境不同

我认为正确的答案是分开追踪。如果您使用的是像NetlifyCMS这样的CMS,您可以创建一个字段,在每次编辑时自动更新日期/时间

无论您在哪里查询降价文件,都可以使用以下字段:

query {
  allMarkdownRemark {
    edges {
      node {
        frontmatter { /* other stuff */ }
        parent {
          ... on File {
            modifiedTime(formatString: "MM/DD/YYYY")
          }
        }
      }
    }
  }
}

并通过postEdge.node.parent.modifiedTime在您的中访问它:下面的答案实际上是错误的,因为文件。modifiedTime是标记文件本身的modifiedTime,而不是内容的modifiedTime。例如,如果您将博客部署在Netlify上,那么其中文件的修改时间将与本地环境不同

我认为正确的答案是分开追踪。如果您使用的是像NetlifyCMS这样的CMS,您可以创建一个字段,在每次编辑时自动更新日期/时间

无论您在哪里查询降价文件,都可以使用以下字段:

query {
  allMarkdownRemark {
    edges {
      node {
        frontmatter { /* other stuff */ }
        parent {
          ... on File {
            modifiedTime(formatString: "MM/DD/YYYY")
          }
        }
      }
    }
  }
}


并通过postEdge.node.parent.modifiedTime访问它。您可以使用存储在Git中的信息获取文件修改的最新时间

第一种方法 手动跟踪它,但如果忘记编辑修改的时间,则很容易出错。因此,如果你不能让其他人工作,我建议你把它作为最后的选择

第二种方法 您可以编辑gatsby-node.js以从Git中提取信息,如下所示:

const{execSync}=requirechild\u进程 exports.onCreateNode={node,actions}=>{ // ... 如果node.internal.type===markdown备注{ const gitoauthortime=execSync `git log-1-pretty=格式:%aI${node.fileAbsolutePath}` .托斯特林 actions.createNodeField{ 节点, 姓名:gitAuthorTime, 值:gitAuthorTime, } } // ... } 然后,在模板中,您可以获取它:

query($slug: String!) {
  markdownRemark(fields: { slug: { eq: $slug } }) {
    # ...
    fields {
      gitAuthorTime
    }
    # ...
  }
}
最后,在JSX中使用它,如下所示:

import React from "react"

const BlogPost = (props) => {
  const { gitAuthorTime } = props.data.markdownRemark.fields

  render(<p>Updated at: ${gitAuthorTime}</p>)
}

export default BlogPost

如果你想查看的话,我在我的博客文章中写了更多关于这方面的内容。

你可以使用存储在Git中的信息获取文件修改的最新时间

第一种方法 手动跟踪它,但如果忘记编辑修改的时间,则很容易出错。因此,如果你不能让其他人工作,我建议你把它作为最后的选择

第二种方法 您可以编辑gatsby-node.js以从Git中提取信息,如下所示:

const{execSync}=requirechild\u进程 exports.onCreateNode={node,actions}=>{ // ... 如果node.internal.type===markdown备注{ const gitoauthortime=execSync `git log-1-pretty=格式:%aI${node.fileAbsolutePath}` .托斯特林 actions.createNodeField{ 节点, 姓名:gitAuthorTime, 值:gitAuthorTime, } } // ... } 然后,在模板中,您可以获取它:

query($slug: String!) {
  markdownRemark(fields: { slug: { eq: $slug } }) {
    # ...
    fields {
      gitAuthorTime
    }
    # ...
  }
}
最后,在JSX中使用它,如下所示:

import React from "react"

const BlogPost = (props) => {
  const { gitAuthorTime } = props.data.markdownRemark.fields

  render(<p>Updated at: ${gitAuthorTime}</p>)
}

export default BlogPost
如果你想查看的话,我在我的博客文章中写了更多关于这方面的内容