長年のリスナー、初めての発信者:-)
私はnodejsとjavascriptに不慣れで、イベントとコールバックモデルに頭を悩ませるのに苦労しています。
私の目標は、写真の配列(名前、幅、高さ、exifデータ)をJSONとして返すことです。これは、私のアプリが写真のJSON配列でその魔法を働かせることができるようにするために必要です。
状況:私のコードは、物事が希望の順序で実行されていないことを除いて、機能しているようです。各画像のJSONをHTTP応答にストリーミングすることを期待していますが、コンソールロギングにより、物事が目的の順序になっていないことがわかり、res.end()の呼び出しが早すぎると思われます。これは、私のWebリクエストが応答で何も取得しないことを意味します。
関連するコード:
fs.readdir(readDir, function (err, files) {
var picsInfo;
if (err) res.writeHead(500, err.message);
else if (!files.length) res.writeHead(404);
else {
res.writeHead(200, { 'Content-Type': 'application/json' });
files.forEach(function(file) {
console.log('easyimage');
easyimg.info(readDir + '/' + file, function(err, stdout, stderr) {
if (err) throw err;
console.log(JSON.stringify(stdout));
res.write(JSON.stringify(stdout));
});
});
}
res.end();
});
私のコンソールに表示される出力は、物事が正常ではないことを示しています(各写真がresに送信されることを期待しています):
easyimage
easyimage
easyimage
easyimage
easyimage
easyimage
easyimage
easyimage
easyimage
easyimage
{"type":"JPEG","depth":"8","width":"933","height":"1400","size":"532365B","name":"6.jpg"}
{"type":"JPEG","depth":"8","width":"1400","height":"933","size":"318134B","name":"3.jpg"}
{"type":"JPEG","depth":"8","width":"1400","height":"933","size":"310927B","name":"10.jpg"}
{"type":"JPEG","depth":"8","width":"933","height":"1400","size":"258928B","name":"1.jpg"}
req.method=GET...
{"type":"JPEG","depth":"8","width":"1400","height":"928","size":"384475B","name":"7.jpg"}
{"type":"JPEG","depth":"8","width":"933","height":"1400","size":"469711B","name":"4.jpg"}
{"type":"JPEG","depth":"8","width":"1400","height":"933","size":"392666B","name":"2.jpg"}
{"type":"JPEG","depth":"8","width":"1400","height":"933","size":"354468B","name":"5.jpg"}
{"type":"JPEG","depth":"8","width":"1400","height":"933","size":"438143B","name":"9.jpg"}
{"type":"JPEG","depth":"8","width":"933","height":"1400","size":"304939B","name":"8.jpg"}
私が見つけたいくつかの例を使用してみました(たとえば、http: //blog.nakedjavascript.com/going-evented-with-nodejsですが、イベント/コールバックモデルに関して何か重要なものが欠けていると思います。ポインタやヘルプをいただければ幸いです。また、ここでの私のアプローチ(つまり、JSONをresに送信するなど)が馬鹿げているか最適ではない場合は、何が最善かについてのヒントも気に入っています。
ポインタとヘルプを事前に感謝します!