我对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