快速路由器回调
Express router callbacks
我对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
是异步的,您无法从asynchronous
调用中返回。
利用callback
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, function(data) {
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, cb) {
getMod(data, cb);
}
function getMod(data, cb) {
writeMod(data, cb);
}
function writeMod(data, cb) {
fs.appendFile(location, content, function(err) {
if (err) throw err;
cb(true);
});
}
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 将json回调数据转换为日期
- 未为路由器应用程序调用Node.Js的回调
- 主干.js路由器回调,用于在除 1 个特定 URL 段之外的所有 URL 段上触发
- 主干:中止以前的路由器回调执行
- 突出显示具有骨干路由器回调的所选项目
- Reactjs路由器匹配回调参数总是未定义的
- AngularJS -在重新加载/更改路由器时触发回调
- 延迟回调中的异常:错误:路由器上没有配置uiManager
- 同一路由器上的多个.use()会导致覆盖回调
- 从回调传递变量到express路由器
- 在angular ui路由器状态解析中从$http获取错误回调
- 快速路由器回调