簡體   English   中英

無法讀取undefined(Node js)的屬性'path'

[英]Cannot read property 'path' of undefined (Node js)

我用react和node編寫應用程序,但我的localhost沒有運行,我有這個錯誤:

UNHANDLED REJECTION TypeError: Cannot read property 'path' of undefined

已安裝所有npm-modules,但此錯誤不允許啟動我的項目。 這是我第一次嘗試用節點編寫代碼,所以也許答案就在附近。 我的node.js如下:

const _ = require("lodash")
const Promise = require("bluebird")
const path = require("path")
const select = require(`unist-util-select`)
const fs = require(`fs-extra`)

exports.createPages = ({ graphql, boundActionCreators }) => {
  const { upsertPage } = boundActionCreators

  return new Promise((resolve, reject) => {
    const pages = []
    const blogPost = path.resolve("./src/templates/blog-post.js")
    resolve(
      graphql(
        `
      {
        allMarkdownRemark(limit: 1000) {
          edges {
            node {
              fields {
                slug
              }
            }
          }
        }
      }
    `
      ).then(result => {
        if (result.errors) {
          console.log(result.errors)
          reject(result.errors)
        }

        // Create blog posts pages.
        _.each(result.data.allMarkdownRemark.edges, edge => {
          upsertPage({
            path: edge.node.fields.slug, // required
            component: blogPost,
            context: {
              slug: edge.node.fields.slug,
            },
          })
        })
      })
    )
  })
}

// Add custom slug for blog posts to both File and MarkdownRemark nodes.
exports.onNodeCreate = ({ node, boundActionCreators, getNode }) => {
  const { addFieldToNode } = boundActionCreators
  if (node.internal.type === `File`) {
    const parsedFilePath = path.parse(node.relativePath)
    const slug = `/${parsedFilePath.dir}/`
    addFieldToNode({ node, fieldName: `slug`, fieldValue: slug })
  } else if (node.internal.type === `MarkdownRemark`) {
    const fileNode = getNode(node.parent)
    addFieldToNode({
      node,
      fieldName: `slug`,
      fieldValue: fileNode.fields.slug,
    })
  }
}

我認為你的問題在這里:

   ).then(result => {
    if (result.errors) {
      console.log(result.errors)
      reject(result.errors)
    }

你沒有在if塊中提前返回,所以該功能正在繼續,並試圖在之后做所有事情。

相反,只需在那里拋出一個回報:

return reject(result.errors) // Now will not continue

但更具體地說,您的承諾上沒有錯誤處理程序,這就是您看到UNHANDLED REJECTION警告的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM