Javascript:具有多个查询参数的嵌套JSON api请求
我试图为我的下一个网站制作一个API,但在一个express应用程序中很难获得相同url的多个查询结果 虚拟数据:Javascript:具有多个查询参数的嵌套JSON api请求,javascript,json,node.js,api,express,Javascript,Json,Node.js,Api,Express,我试图为我的下一个网站制作一个API,但在一个express应用程序中很难获得相同url的多个查询结果 虚拟数据: var data = [{ articles : [{ id : '0', url : 'foo', title : 'Foo', body : 'some foo bar', category : 'foo', tags : [ 'foo'
var data = [{
articles : [{
id : '0',
url : 'foo',
title : 'Foo',
body : 'some foo bar',
category : 'foo',
tags : [
'foo'
]
}, {
id : '1',
url : 'foo-bar',
title : 'Foo bar',
body : 'more foo bar',
category : 'foo',
tags : [
'foo', 'bar'
]
}, {
id : '2',
url : 'foo-bar-baz',
title : 'Foo bar baz',
body : 'more foo bar baz',
category : 'foo',
tags : [
'foo',
'bar',
'baz'
]
}]
}, {
users : [{
name: 'Admin'
}, {
name: 'User'
}]
}];
路由器:
// Grabs articles by categories and tags
// http://127.0.0.1:3000/api/articles/category/foo/tag/bar
router.get('/articles/category/:cat/tag/:tag', function(req, res) {
var articles = data[0].articles;
var q = articles.filter(function (article) {
return article.category === req.params.cat;
return article.tags.some(function(tagId) { return tagId === req.params.tag;});
});
res.json(q);
});
如果我请求http://127.0.0.1:3000/api/articles/category/foo/tag/bar
url?现在,如果我这样做,tag
url将被忽略,只有category
请求才有效
谢谢你的帮助 问题就在这里>>
return article.category === req.params.cat;
return article.tags.some(function(tagId) { return tagId === req.params.tag;});
第一个return
语句将停止函数中的进一步操作
所以你需要如果。。。else
或案例
或此处的帮助函数问题在此处>>
return article.category === req.params.cat;
return article.tags.some(function(tagId) { return tagId === req.params.tag;});
第一个return
语句将停止函数中的进一步操作
所以你需要
如果。。。否则
或案例
或此处的帮助函数您需要重写返回
语句,如下所示:
return article.category === req.params.cat &&
article.tags.some(function(tagId) {
return tagId === req.params.tag;
});
。。。使用,否则您将只在第一个条件下进行测试,而不会到达另一个语句
以下是当请求位于类别“foo”和标记“bar”上时的测试:
var数据=
[
{条款:
[
{id:'0',url:'audrey hepburn',title:'audrey hepburn',body:'没有什么是不可能的,单词本身说'我是可能的'!',类别:'foo',标签:['foo']},
{id:'1',url:'walt disney',title:'walt disney',body:'当事情发生时,你可能没有意识到,但对你来说,牙齿上的一脚可能是世界上最好的事情。',
{id:'2',url:'unknown',title:'unknown',body:'即使是最伟大的人也曾经是初学者。不要害怕迈出第一步。'category:'bar',tags:['foo','bar','baz']},
{id:'3',url:'neale donald walsch',标题:'neale donald walsch',正文:'你害怕死,你害怕活。这是一种多么好的生存方式',类别:'bar',标签:['foo','bar','baz']}
]
},
{用户:
[
{name:'Admin'},
{name:'用户'}
]
}
];
req={params:{cat:'foo',tag:'bar'};
var articles=数据[0]。articles;
var q=articles.filter(函数(article){
return article.category==req.params.cat&&
article.tags.some(函数(tagId){
return tagId==req.params.tag;
});
});
write(“”,JSON.stringify(q,null,4),“”)
您需要将return
语句重写如下:
return article.category === req.params.cat &&
article.tags.some(function(tagId) {
return tagId === req.params.tag;
});
。。。使用,否则您将只在第一个条件下进行测试,而不会到达另一个语句
以下是当请求位于类别“foo”和标记“bar”上时的测试:
var数据=
[
{条款:
[
{id:'0',url:'audrey hepburn',title:'audrey hepburn',body:'没有什么是不可能的,单词本身说'我是可能的'!',类别:'foo',标签:['foo']},
{id:'1',url:'walt disney',title:'walt disney',body:'当事情发生时,你可能没有意识到,但对你来说,牙齿上的一脚可能是世界上最好的事情。',
{id:'2',url:'unknown',title:'unknown',body:'即使是最伟大的人也曾经是初学者。不要害怕迈出第一步。'category:'bar',tags:['foo','bar','baz']},
{id:'3',url:'neale donald walsch',标题:'neale donald walsch',正文:'你害怕死,你害怕活。这是一种多么好的生存方式',类别:'bar',标签:['foo','bar','baz']}
]
},
{用户:
[
{name:'Admin'},
{name:'用户'}
]
}
];
req={params:{cat:'foo',tag:'bar'};
var articles=数据[0]。articles;
var q=articles.filter(函数(article){
return article.category==req.params.cat&&
article.tags.some(函数(tagId){
return tagId==req.params.tag;
});
});
write(“”,JSON.stringify(q,null,4),“”)代码>返回article.category==req.params.cat,article.tags.some(函数(tagId){return tagId==req.params.tag;})代码>看起来像是工作。这是一个好的解决方案吗?编辑:没有。返回每个类别。标记将起作用。不,return
在这种情况下将执行除返回最后一个语句以外的所有语句。您可以尝试[articles].indexOf(el)
和[Tags].indexOf(el)
如果两者都是数组。return article.category==req.params.cat,article.Tags.some(函数(tagId){return tagId==req.params.tag;})代码>看起来像是工作。这是一个好的解决方案吗?编辑:没有。返回每个类别。标签起作用。不,return
在这种情况下将执行除返回最后一个语句以外的所有语句。您可以尝试[articles]。indexOf(el)
和[Tags]。如果两者都是数组,则indexOf(el)
。我想我可能误解了。您希望执行如下请求:/articles/category/foo/tag/bar
。是这样吗?你能不能把原来的router.get(/articles/category/:cat/tag/:tag'),…
URL模式放回去,在函数中只输出res.json(req.params)
。我想确保您在该参数中看到bot类别和标记。好的,这意味着URL模式工作正常。忘记我写的所有内容,我将我的答案恢复到以前的状态。现在让我检查一下还有什么可能出错……我使用您在github上的数据更新了我的答案,并替换了它带有&&
的|
操作符要求同时满足cat和tag条件。我稍微美化了一下api路由器。再次感谢您的帮助!:)不,我的意思是,当您将article.category==req.params.cat
移到some
回调函数中时,实际上,您将该测试的执行倍增,这将始终是相同的。但实际上,这不会对性能产生太大影响。没关系,我想我可能误解了。您希望执行如下请求:/articles/category/foo/tag/bar
。是这样吗?库尔