我之前有多个回调,然后我想做一个res.send()来构建JSON API:
app.get('/api', function (req, res){
...
function logPagesId() {
console.log("load: " +pagesId);
console.log("lenght: " +pagesId.length);
findWords(logWords);
}
function logWords() {
console.log("TAGS: "+wordsArray);
return res.send(wordsArray);
}
findIdPages(logPagesId);
}
在日志中,我有:
Successfully connected to MongoDB
load: 45678bdhbdns768,45678bdhbdns765
lenght: 2
TAGS:
{ _id: 45678bdhbdns765,
result:
{ ID1: { Pages: [Object], Name: [Object] },
ID2: { Pages: [Object], Name: [Object] },
....
最后,它返回[]。
[编辑]
[完整代码]
app.get('/tags/reference/:reference', function (req, res){
var articlesId = [];
var tagsArray = [];
function findIdArticles(callback) {
Articles.find({reference: req.params.reference}, '_id' , function (err, articles) {
if (!err) {
for (var i = 0; i < articles.length; i++) {
articlesId.push(articles[i]._id);
}
for (i=0 ; i < articlesId.length; i++){
Extract_Tags.findById(articlesId[i], function (err, tags) {
if (!err) {
tagsArray.push(tags);
console.log(tags);
callback(null, tagsArray);
} else {
callback(err);
}
});
}
} else {
callback(err);
}
});
}
function logArticlesId(err, response) {
res.status(503).send('fancy server side error message!');
console.log("load: " +articlesId);
console.log("tagsArray: " +tagsArray);
console.log("response: " +response);
logTags(response);
}
function logTags(response) {
console.log("TAGS: "+response);
res.send(response);
}
findIdArticles(logArticlesId);
});
以下是包含一些更改的完整代码。只是有错误花哨的服务器端错误消息! 谢谢你的帮助
答案 0 :(得分:0)
首先,即使出现错误,您的回调函数也应始终返回。否则,永远不会调用错误场景中的回调函数!
所以,对于findIdArticles()
function findIdArticles(callback) {
Articles.find({folder: req.params.folder}, '_id' , function (err, articles) {
if (!err) {
for (var i = 0; i < articles.length; i++) {
pagesId.push(pages[i]._id);
}
callback(null, pagesId);
} else {
callback(err);
}
});
}
其次,您致电findIdPages
并向我们展示findIdArticles
当这些错误得到解决后,您的app.get
应如下所示:
app.get('/api', function (req, res){
...
function logPagesId(err, response) {
// deal with errors, for ie:
if (err) {
res.status(503).send('fancy server side error message!');
return;
}
console.log("load: " +response);
console.log("lenght: " +response.length);
findWords(response);
}
function logWords() {
console.log("TAGS: "+wordsArray);
return res.send(wordsArray);
}
findIdPages(logPagesId);
}
但它仍然没有帮助,因为你从来没有在这里调用logWords。我猜它在findWords中,需要类似的工作。我已经完成了现有的功能。
编辑我的回答出错了。请立即查看。