Вы изспользуете асинхронныые функции (всякая функция с коллбэком, как правило, асинхронная). Сам их смысл в том, что результат их работы вы можете получить только внутри коллбэка. Результат работы fs.stat() доступен внутри её коллбэка и перередаётся там fs.readFile(), а результат работы fs.readFile() доступен уже только внутри её коллбэка, второго уровня вложенности, и т.д. Когда вы возвращаете return res;, fs.stat() ещё не окончила работу, а fs.readFile() ещё даже не начала, поэтому значение res возвращается сразу после объявления, когда оно всё ещё undefined. Получить содержимое файла и вывести его в console.log() можно только внутри самого глубокого коллбэка:
var
fs = require('fs'),
dir = "header.html";
function getFile(dir) {
fs.stat(dir, function(err, stats) {
if(err)
return console.log(err);
fs.readFile(dir, function(err, data) {
var res = new Buffer( data );
console.log(res);
});
});
}
getFile(dir);
Синхронный вариант:
'use strict';
var
fs = require('fs'),
dir = "header.html";
function getFile(dir) {
var stats = fs.statSync(dir);
var res = fs.readFileSync(dir);
return res;
}
console.log( getFile(dir) );