在函数执行期间,我试图在lambda中读写/ temp dir,我知道最好的方法是使用S3,但是对于此项目,我必须使用节点文件系统
const fs = require('fs');
exports.handler = async (event) => {
const path = '/tem/hi.json';
const write = (file) => {
fs.writeFile(file, "Hello World!", function(err) {
if (err) return console.log(err);
return {
statusCode:200,
body:JSON.stringify('data was written')
};
});
};
return write(path);
};
答案 0 :(得分:1)
文件路径中有错字。
更改
const path = '/tem/hi.json';
到
const path = '/tmp/hi.json';
此外,fs.writeFile
是一个异步操作。散布它,以便您可以await
使用它:
const write = file => {
return new Promise((res, rej) => {
fs.writeFile(file, JSON.stringify({ message: 'hello world' }), (err) => {
if (err) {
return rej(err)
}
return res({
statusCode: 200,
body: JSON.stringify({message: 'File written successfully'})
})
})
})
}
最后,在您的客户端(处理程序的最后一行)上,像这样调用它:
return await write(path)
答案 1 :(得分:1)
fs.writeFile
是异步操作,因此lambda在完成之前结束。您可以使用fs.writeFileSync
阻止lambda执行,直到成功写入文件为止:
const write = (file) => {
try {
fs.writeFileSync(file, "Hello World!");
return {
statusCode: 200,
body: 'data was written'
};
} catch (err) {
console.log(err);
return {
statusCode: 500,
body: 'data was not written'
};
}
};