如何在我的React应用程序中调用netlify lambda函数?

时间:2019-03-22 03:57:29

标签: reactjs function lambda aws-lambda netlify

我是netlify和无服务器架构的新手。在react中,我通常将一个动作导入到我的组件中,然后调用该动作以对服务器进行调用。现在,我只是想在本地测试我的函数,我不确定从哪里导入或如何精确调用我的函数以查看其是否有效。帮助将不胜感激。下面是一个非常基本的功能,我正在尝试调用以开始使用。

//in functions/test.js

import axios from 'axios'

exports.handler = function(event, context, callback) {
    axios.post('http://requestbin.fullcontact.com/1c50pcg1', {name: 'richard'}).then((response)=>{
      callback(null, {
        statusCode: 200,
        body: response.body
      })
    }).catch((err) => {
      console.log(err)
    })
}

1 个答案:

答案 0 :(得分:0)

  

在react中,我通常将一个动作导入到我的组件中,然后调用该动作以对服务器进行调用

这正是您在“服务器”为API Gateway的无服务器架构中所做的事情。然后,API Gateway会将传入的请求代理到您的Lambda函数。

您可以定义特定于HTTP的方法来调用Lambda函数,也可以将API Gateway配置为将任何HTTP方法代理给它们。然后需要您自己处理路由。幸运的是,有一些软件包可以让您在Lambda函数之前包装一个Web框架(例如Express),因此可以通过这些类型的框架来处理您的路由。

另一种选择是使用JavaScript SDK来调用函数,并使用名称直接从浏览器中调用Lambda。但是,这种方法并不灵活,因为您严重依赖于函数的名称/ ARN来调用它,这意味着函数名称或ARN的任何更改(例如,考虑到您要迁移到生产环境)都会直接影响您的功能。客户。 Lambda代码的更改也可能意味着客户需要更改其实现,这绝对不是一个好习惯。另一个缺点是,以这种方式处理动作要困难得多,因为单击一次按钮将决定要调用的Lambda函数。您的前端可能很快变得混乱。当然,在某些用例中,您可能会首选这种方法而不是API Gateway,但这需要加以考虑。

另一方面,通过使用API​​ Gateway,您只是进行常规的REST调用,然后将触发您的Lambda函数。 Lambda函数的任何更改都不会影响客户端与REST API之间的约定,因此最终变得更加灵活。而且,依赖HTTP方法比依赖函数名称/ ARN要容易得多

由于您已经习惯了React-> Server方法,因此建议您选择API网关之路。

您可以在此tutorial中了解如何通过API网关触发Lambda函数。

如果您想从浏览器中调用Lambda函数,那么此tutorial可能会很方便。