我對Express/Node.js/Mongoose有點新奇,並且我遇到了回調地獄。我想要做的是獲得一個請求到這個API URL /page/module/add/:id
,如果成功呼叫buildMod(data)
,那麼該函數調用getMod(data)
,然後該函數調用writeMod(data)
,並最終我想通過true
值的權利回到我的router
。快速路由器回調
一旦我有迴應,我想要返回它。我在網上搜索和有沒有很多類似的情況 - 我個人認爲我有我自己陷得太深了......
router.get('/page/module/add/:id', function(req, res) {
Client.find({"emailAddress": emailAddress, "sequence.slug": pageSlug},
{"emailAddress": 1, "sequence.$": 1}, function (err, data) {
if (!err) {
res.statusCode = 200;
buildMod(data);
return res.json(data);
} else {
res.statusCode = 500;
log.error('Internal error(%d): %s', res.statusCode, err.message);
return res.json({
error: 'Server error'
});
}
}).select('sequence emailAddress domain');
});
function buildMod(data) {
getMod(data);
}
function getMod(data) {
Module.find({ 'module_id': moduleNumID }, function (err, module) {
if(!module) {
return false;
}
if (!err) {
writeMod(data);
} else {
return false;
}
});
}
function writeMod(data) {
fs.appendFile(location, content, function(err) {
if (err) throw err;
return true;
});
}
我知道聲明是錯誤的回調函數,但是我一直嘗試,我似乎無法通過這個階段。我確信這絕對是可能的,任何幫助真的很感激!
'fs.appendFile'是異步,你不能從'async'調用返回..請使用callback' – Rayon