Javascript AWS lambda:“;处理程序';手柄';模块上缺少';出口'&引用;

Javascript AWS lambda:“;处理程序';手柄';模块上缺少';出口'&引用;,javascript,node.js,amazon-web-services,aws-lambda,Javascript,Node.js,Amazon Web Services,Aws Lambda,我已经将一个节点jsexpress项目上传到AWS lambda。以下是保存为exports.js的处理程序代码: const express = require('express'), bodyParser = require('body-parser'), request = require('request'), app = express().use(bodyParser.json()); // creates express http server exports.h

我已经将一个
节点js
express项目上传到
AWS lambda
。以下是保存为
exports.js
的处理程序代码:

const
  express = require('express'),
  bodyParser = require('body-parser'),
  request = require('request'),
  app = express().use(bodyParser.json()); // creates express http server

exports.handler = function(callback){
    request('http://localhost/php-rest/api.php/routes?filter=route_short_name', function(error, response, body) {
        if (!error && response.statusCode == 200) {
            message = JSON.stringify(JSON.parse(body));
            return callback(message, false);
        } else {
            return callback(null, error);;
        }
    });
}

app.get('/exports.handler', function(req, res) {

    exports.handler(function(err, data){
        if(err) return res.send(err);
        res.send(data);
    });

});
处理程序代码与我的
app.js
文件是分开的。在aws lambda上测试时,我发现以下错误:

{
  "errorMessage": "Handler 'handler' missing on module 'exports'"
} 

如果您没有索引和启动函数,则通常会出现此选项。您可以在导出处理程序中将其定义为索引:

exports.handler = function index(event, context, callback) {
    // Your start code here
}
这就是lambda函数,它应该作为一个处理程序存在。在您的代码中,app.get()必须由AWS API网关处理。因为它是调用lambda函数的方法。在lambda函数中不能有nodejs服务器

因此.zip文件应命名为index.js,因为当我们上载.zip文件时,它会提取内容并找到我们提供的处理程序名称。 这些是应上载的.zip文件内容

  • index.js.zip

    • 节点单元

    • index.js

    • package.json

    • package-lock.json


事件和上下文参数是什么?稍后如何调用此函数?在事件参数中,我们将所有参数传递给处理程序方法。例如查询参数、post、get参数等。它使用上下文参数来操作处理程序方法的上下文。@SameeraPiyasundara这将如何更改我代码的后半部分?是的,但不能在lambda函数中创建服务器。这将由API网关处理。其创建服务器的app.listen()执行结果已成功,但API网关的URL仍出现内部服务器错误。是的,您的URL为localhost。请查看您收到的错误消息。您不能从任何远程位置向localhost发送请求。因此,首先托管php应用程序。不,我的意思是,您将在lambda函数中访问的url是localhost。