как подключить функцию netlify к моему угловому приложению - PullRequest
1 голос
/ 27 мая 2019

Я не могу выполнить запрос на создание данных формы с помощью функции netlify в моем приложении angular

Я пытаюсь применить этот урок https://www.netlify.com/blog/2018/07/09/building-serverless-crud-apps-with-netlify-functions--faunadb/ в моем проекте с angular7 front.

моя функция netlify:

/* code from functions/todos-create.js */
import faunadb from 'faunadb' /* Import faunaDB sdk */

/* configure faunaDB Client with our secret */
const q = faunadb.query
const client = new faunadb.Client({
  secret: process.env.FAUNADB_SECRET
})

/* export our lambda function as named "handler" export */
exports.handler = (event, context, callback) => {
  /* parse the string body into a useable JS object */
  const data = JSON.parse(event.body)
  console.log("Function `todo-create` invoked", data)
  const todoItem = {
    data: data
  }
  /* construct the fauna query */
  return client.query(q.Create(q.Ref("classes/todos"), todoItem))
  .then((response) => {
    console.log("success", response)
    /* Success! return the response with statusCode 200 */
    return callback(null, {
      statusCode: 200,
      body: JSON.stringify(response)
    })
  }).catch((error) => {
    console.log("error", error)
    /* Error! return the error with statusCode 400 */
    return callback(null, {
      statusCode: 400,
      body: JSON.stringify(error)
    })
  })
}

мой сервис:

import { Injectable } from '@angular/core';
import { Mission } from 'src/app/shared/models';

@Injectable({
  providedIn: 'root'
})
export class MissionService {

  public mission = new Mission();
  myTodo = {
    title: 'My todo title',
    completed: false,
  };

  constructor() { }

  createTodo(data) {
    return fetch('/.netlify/functions/todos-create', {
      body: JSON.stringify(data),
      method: 'POST'
    }).then(response => {
      return response.json();
    });
  }
}

, как того требует учебник, я добавляю это в конец своего пакета. Json:

"proxy": {
    "/.netlify/functions": {
      "target": "http://localhost:4200",
      "pathRewrite": {
        "^/\\.netlify/functions": ""
      }
    }
  }

но с "http://localhost:4200" адресом для угловых я предположил

Я применяю createTodo при нажатии на кнопку формы, но:

" Ошибка ОШИБКИ: "Uncaught (в обещании): SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 1 данных JSON "в firefox

AND

" Запрос от ::ffff: 127.0.0.1: POST / todos-create Ответ с состоянием 500 в 12 мс. Ошибка при вызове: Ошибка типа: n не является функцией "в консоли

решение здесь: https://github.com/netlify/netlify-lambda/issues/64

1 Ответ

0 голосов
/ 27 мая 2019

Вам нужно посмотреть, какое событие получено функцией netlify.Похоже, что тело не является объектом JSON в виде строки, как и ожидалось в JSON.parse.Это не удивительно, учитывая, что у вызова GET нет тела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...