我在玩弄嘗試通過編寫配方應用程序來學習Node + Express和Angular。Node.js json文件被另一個調用覆蓋
我在節點存儲食譜的陣列,並在JSON文件作爲我的數據存儲成分的陣列,並且我有一個簡單saveMeal()和saveIngredient()方法是這樣的:
exports.saveIngredient = function(req, res) {
var ing = req.body;
console.log('Saving Ingredient: ' + JSON.stringify(ing, null, 4));
fs.readFile('./data/data.json', 'utf-8', function (error, data) {
var mData = JSON.parse(data);
ing.id = generateId(ing.name, mData.ingredients);
mData.ingredients.push(ing);
fs.writeFile('./data/data.json', JSON.stringify(mData, null, 4), function(err) {
res.writeHead(200, { 'Content-Type': 'text/json' });
res.end(ing.id, 'utf-8');
});
});
};
我遇到的問題是,Angular應用程序觸發了一系列回調節點的電話,以便在開始下一個呼叫之前不等待每個成分完成每個成分,儘管每次呼叫都會返回配料的ID,但只有最後一個組件會保存,所以最後一次調用必須覆蓋之前的數據。
我知道我可以改變Angular應用程序在保存下一個成分之前等待響應的方式,但我有點感覺Node應用程序應該能夠支持這樣的請求。有沒有辦法鎖定文件或我應該採取的另一種方法?
但是,這就是節點是如何工作的......「非阻塞」 – Dalorzo