Чтение содержимого опубликованного .txt файла с функцией Azure NodeJS - PullRequest
1 голос
/ 30 апреля 2020

Я хочу знать содержимое из файла .txt, который я загружаю с помощью ответа JSON с функцией Azure. Я могу прочитать имя файла и тип, но также хочу преобразовать файл в строку в моем ответе JSON. Но в настоящее время ответ в данных остается пустым:

{
  "name": "20200429112846_-_IB_records.txt",
  "type": "text/plain",
  "data": ""
}

Мой код:

var multipart = require("parse-multipart");

module.exports = function (context, request) {   
    // encode body to base64 string
    var bodyBuffer = Buffer.from(request.body);

    var boundary = multipart.getBoundary(request.headers['content-type']);
    // parse the body
    var parts = multipart.Parse(bodyBuffer, boundary);

    var fileContent = "";

    var fileBuffer = Buffer.from(parts[0].data);

    var fs = require('fs');

    fs.readFile(fileBuffer, 'utf8', function(err, data) {
        if (err) throw err;
        fileContent = data;
    });

    context.res = { body : { name : parts[0].filename, type: parts[0].type, data: fileContent}}; 
    context.done();  
};

Кто-нибудь получил идею?

1 Ответ

0 голосов
/ 30 апреля 2020

fs.readFile работает асинхронно, поэтому

context.res = { body : { name : parts[0].filename, type: parts[0].type, data: fileContent}}; 
context.done();  

выполняется до того, как файл действительно будет прочитан. Один из способов решить эту проблему - поместить context -материал в обратный вызов readFile:

 fs.readFile(fileBuffer, 'utf8', function(err, data) {
        if (err) throw err;
        fileContent = data;
        context.res = { body : { name : parts[0].filename, type: parts[0].type, data: fileContent}}; 
        context.done();  
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...