Функции Netlify в Gatsby JS

Я пытаюсь следовать этому руководству https://www.gatsbyjs.org/blog/2018-12-17-turning-the-static-dynamic/

Я установил зависимости, и все в порядке. Я добавил необходимые скрипты в свой package.json это то, что у меня сейчас есть для скриптов

"scripts": {
    "build": "gatsby build && netlify-lambda build src/lambda",
    "start": "run-p start:**",
    "start:app": "npm run develop",
    "develop": "gatsby develop",
    "build:app": "gatsby build",
    "build:lambda": "netlify-lambda build src/lambda",
    "format": "prettier --trailing-comma es5 --no-semi --single-quote --write \"src/**/*.js\""
  },

Я добавил netlify.toml в корень.

Я добавил свой gatsby-config.js, чтобы добавить часть developMiddleWare и прокси-сервер var, показанный здесь

require('dotenv').config()
var proxy = require("http-proxy-middleware")


module.exports = {
  siteMetadata: {
    title: `Creative Portfolio`,
  },
  developMiddleware: app => {
    app.use(
      "/.netlify/functions/",
      proxy({
        target: "http://localhost:9000",
        pathRewrite: {
          "/.netlify/functions/": "",
        },
      })
    )
  },
  plugins: [
    `gatsby-plugin-react-helmet`,
    `gatsby-plugin-sass`,
    `gatsby-transformer-remark`,
    {
      resolve: `gatsby-source-datocms`,
      options: {
        apiToken: process.env.DATO_API_TOKEN,
      },
    },
  ],
  
}

Затем я сделал следующий файл в src / lambda / hello.js

// For more info, check https://www.netlify.com/docs/functions/#javascript-lambda-function
export function handler(event, context, callback) {
    console.log("queryStringParameters", event.queryStringParameters)
    callback(null, {
      // return null to show no errors
      statusCode: 200, // http status code
      body: JSON.stringify({
        msg: "Hello, World! " + Math.round(Math.random() * 10),
      }),
    })
  }

Затем, наконец, на моей странице index.js я добавил кнопку для получения ответа.

function handleClick(e) {
    fetch("/.netlify/functions/hello")
  .then(response => response.json())
  .then(console.log)
  }

кнопка в компоненте

<a href="#" onClick={handleClick}
      Click me
    </a>>

Теперь что касается результата, когда я запускаю yarn start, я получаю следующий успех для прокси в терминале.

info [HPM] Proxy created: /  -> http://localhost:9000
info [HPM] Proxy rewrite rule created: "/.netlify/functions/" ~> ""

И когда я нажимаю на кнопку, в моей консоли появляется следующая ошибка.

GET http://localhost:8000/.netlify/functions/hello 504 (Gateway Timeout)
Uncaught (in promise) SyntaxError: Unexpected token E in JSON at position 0 

Надеюсь, кто-то может помочь с этим, я застрял.

Я также получаю следующую ошибку в моей консоли

[HPM] Error occurred while trying to proxy request hello from localhost:8000 to http://localhost:9000 (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors) 

person Anders Kitson    schedule 11.12.2019    source источник
comment
Можете ли вы отправить текущий код в репозиторий git?   -  person abumalick    schedule 12.12.2019
comment
да просто держись   -  person Anders Kitson    schedule 12.12.2019


Ответы (1)


Вы забыли start:lambda скрипт в package.json скриптах

"start:lambda": "netlify-lambda serve src/lambda",

ref https://www.gatsbyjs.org/blog/2018-12-17-turning-the-static-dynamic/

person abumalick    schedule 11.12.2019
comment
вы имеете в виду добавить ; в конец? - person Anders Kitson; 12.12.2019
comment
В своем вопросе вы написали это так require('dotenv').config(. Но я вижу, что в вашем репозитории это не так - person abumalick; 12.12.2019
comment
поэтому он отлично выполняет команду на развернутом сайте, но в разработке он не работает. - person Anders Kitson; 12.12.2019
comment
Держи @AndersKitson - person abumalick; 12.12.2019