Это из-за асинхронной архитектуры Node.js, ваш console.log
выполняется перед задачей чтения файла.
Если вы хотите получить истинный результат, вы должны заставить свою функцию возвращать обещание, а также заметить что когда ваше событие завершится sh, тогда разрешите ваши данные.
Что-то вроде этого может вам помочь:
const fs = require('fs');
const readline = require('readline');
async function read_file(filename) {
const filePath = './uploads/' + filename;
var readData = [];
let data = await new Promise((resolve, reject) => {
try {
readline.createInterface({
input: fs.createReadStream(filePath),
terminal: false
})
.on('line', function (line) {
readData.push(line);
})
.on('close', function() {
resolve(readData);
});
}
catch(e) {
reject(e);
}
});
console.log(data);
}