我有以下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}
答案 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);
};
如您所见,我在超时中添加了回调以加载它。此方法成为“非阻塞”的代码,没有回调,您的主要功能将无法完成。
如果要使用第一种结构,只需将所有代码放在主处理程序中,并将回调放在类似示例的超时中即可。