2017-03-27 6 views
1

フォルダ内のすべてのファイル名でjsonファイルを作成したいのですが、以下のコードで何が問題になっていますか?readdir node.jsの同期出力なし

const iconsFolder = './resources/assets/icons'; 
const fs = require('fs'); 
const jsonfile = require('jsonfile'); 

let json = []; 
fs.readdirSync(iconsFolder, [], (err, files) => { 
    files.forEach(file => { 
    json.push({'name': file.split('.')[0]}) 
    }); 
}) 

console.log(json); // empty array? 

答えて

2

readdirSyncはファイルを返します。決して呼び出されないコールバック経由でアクセスしようとしています。あなたは、戻り値としてそれを取得します:

var files = fs.readdirSync(iconsFolder, []); 

files.forEach(file => { 
    json.push({'name': file.split('.')[0]}) 
}); 

おそらく、あなたは非同期であるfs.readdirを使用しようとしている。

fs.readdir(iconsFolder, [], (err, files) => { 
    files.forEach(file => { 
    json.push({'name': file.split('.')[0]}) 
    }); 
    console.log(json); 
}) 
+0

どのようにファイルを書き込むことができますか? readdirの後に 'jsonfile.writeFile(iconsFolder、json);を置くことはできますか? – Mellisa

+0

[documentation](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback)を見てください。 – Saravana

0

あなたがreaddirSyncを使用したい場合は、コードが

let json = []; 
let files = fs.readdirSync(iconsFolder); 
files.forEach(file => { 
    json.push({'name': file.split('.')[0]}) 
}); 
する必要があります

また、コールバックを使用する場合は、コードは

let json = []; 
fs.readdir(iconsFolder, (err, files) => { 
    files.forEach(file => { 
    json.push({'name': file.split('.')[0]}) 
    }); 
}); 
である必要があります