AWS Lambda Node JS 8.10处理函数中的语法错误

时间:2018-05-15 06:00:11

标签: node.js amazon-web-services aws-lambda

我有以下AWS lambda方法

NodeJS 8.10.0

// 'use strict';
var fs = require("fs");

class ReadFile{
    constructor(file){
        if(undefined == file){
          this.file = "./index.html";
        }
    }

    content(){
        var buff = fs.readFileSync(this.file);
        return Buffer.from(buff, 'base64').toString('ascii');
    }

}
exports.handler = function (event, context, callback) {
    var f = new ReadFile(event.file);
    callback(null, f.content());
    // callback(null,f.content());
};

我收到了语法错误

但是当我在没有类的处理程序中定义它时,同样的方法正在工作

exports.handler = function (event, context, callback) {
    if (undefined === event.file) {
        event.file = "index.html";
    }
    var cn = fs.readFileSync(event.file);
    callback(null, Buffer.from(cn, 'base64').toString('ascii'));
    // callback(null,f.content());
};

收到错误

{errorMessage=RequestId: a51e4f417 Process exited before completing request}

2 个答案:

答案 0 :(得分:1)

看起来问题出在您的构造函数代码中。我认为您缺少else条件的一部分。所以尝试更换

    constructor(file){
       if(undefined == file){
         this.file = "./index.html";
       }
    }

    constructor(file){
       if(undefined == file){
         this.file = "./index.html";
       }
       else {
         this.file = file;
       }
    }

答案 1 :(得分:0)

发生这种情况是因为您的函数在回调结束执行之前完成。您需要将回调放入 setTimeOut 中以完成其执行。发生这种情况是因为nodeJS使用阻塞执行,并且回调不返回任何内容。

尝试以下结构:

exports.handler = function (event, context, callback) {
    if (undefined === event.file) {
        event.file = "index.html";
    }
    var cn = fs.readFileSync(event.file);
    
    setTimeout(() => { //Timeout to execute the callback
    
      callback(null, Buffer.from(cn, 'base64').toString('ascii'));
      // callback(null,f.content());
    
    }, 10000);
    
    
};

如您所见,我在超时中添加了回调以加载它。此方法成为“非阻塞”的代码,没有回调,您的主要功能将无法完成。

如果要使用第一种结构,只需将所有代码放在主处理程序中,并将回调放在类似示例的超时中即可。