代码之家  ›  专栏  ›  技术社区  ›  MikeO

如何使用无服务器模块在本地调试AWS Lambda Node.js?

  •  1
  • MikeO  · 技术社区  · 7 年前

    我对AWS和serverless等完全陌生。为了加快开发速度,我希望能够在本地调试我的应用程序。

    在本文之后 Running and Debugging AWS Lambda functions locally 我正试图实现这一点。

    在visualstudio代码中,当我运行调试配置时,应用程序会立即退出而不会出错(在'content'变量的声明和初始化上设置断点)。我不确定函数名是否正确。我试图在“index.js”中定义的主“handler”函数中输入:

    exports.handler = (event, context, callBack) =>
    {   
        let bIsPostRequest = false, bIsPutRequest = false, bIsGetRequest = false, bIsDelRequest = false;
        let content = "";
    
    ...
    

    这是我的“launch.json”配置文件:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "node",
                "request": "launch",
                "name": "Launch Debugger",
                "program": 
                 "${workspaceFolder}\\node_modules\\serverless\\bin\\serverless",
                "args":[
                    "invoke",
                    "local",
                    "-f",
                    "index.handler", // function name
                    "--data",
                    "{}"
                ],
                "outFiles": [
                    "${workspaceFolder}\\index.js"
                ]
            }
        ]
    }
    

    另外,我对配置中“outfiles”的定义不是100%肯定。我已经得出结论,这是文件(s)我试图调试,但如果是这样的情况下'outfiles'似乎不适合我的名字。

    我工作的本地环境是windows环境。

    1 回复  |  直到 7 年前
        1
  •  2
  •   MikeO    7 年前

    遇到之后 this post

    const lambdaLocal = require('lambda-local');
    var lambdaFunc = require("./index.js");
    
    lambdaLocal.execute({
    lambdaFunc: lambdaFunc, 
    lambdaHandler: "handler",
    event: {
        context: {
            "resource-path": "/products",
            "http-method": "GET"
        },
        "body-json": {
            name : "ProductA"
        }
     }
    }).then(function(done) {
        console.log(done);
    }).catch(function(err) {
        console.log(err);
    });
    

    我在主工作目录中将这个文件保存为'debugLocal.js'。launch.json文件现在如下所示:

    {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "node",
                "request": "launch",
                "name": "Launch Debugger",
                "program": "${workspaceFolder}\\debugLocal.js"
            }
        ]
    }
    

    到目前为止,一切似乎都复制得相当好。需要注意的一点是,includes上的文件路径必须稍微更改。 require("./js/inc/globalDefines.js"); 而不是 require("js/inc/globalDefines.js");

    推荐文章