Как писать и читать файлы в Lambda-AWS с Node.js - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь записать / прочитать в / temp dir в lambda во время выполнения функции, я знаю, что лучшим способом было бы использовать 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);
};

Ответы [ 2 ]

1 голос
/ 27 марта 2019

fs.writeFile - асинхронная операция, поэтому лямбда заканчивается до ее завершения. Вы можете использовать fs.writeFileSync для блокировки лямбда-выполнения до тех пор, пока файл не будет успешно записан:

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'
     };
   }
};
1 голос
/ 27 марта 2019

У вас есть опечатка в пути к файлу.

Изменить

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...