使用 Restangular 查询节点 api/MongoDB
Query node api/MongoDB with Restangular
我正在学习 MEAN 堆栈。我有一个节点 api 连接到 MongoLab 托管数据库。
api returns 个对象是这样的 (api/messages
):
[
{
_id: "55074ce3c21903c9cce6d02a",
name: "some random message",
__v: 0
},
{
_id: "55074e4a1dad546fcef09769",
name: "a different message",
__v: 0
},
{
_id: "55074e4a1dad546fcef09123",
name: "bingo",
__v: 0
}
]
使用 restangular,我获取数据然后绑定到 $scope
:
Restangular.all('api/messages').getList().then(function (data){
$scope.messages = data;
});
在应用程序的一部分中,我只想 query/return 必要的数据 - 像这样:
Restangular.all('api/messages').customGET('', {"q": {"name": "a different message" }}).then(function (data) {
console.log(data);
});
我只想 return 个包含 X 的对象 - 在本例中,'a different message'。
然而,customGET
方法似乎并没有像我预期的那样工作;我总是得到 所有 个对象。
我怎样才能做到这一点?我一直在搜索和尝试一段时间但没有成功。也许我需要添加一些 api 路由和方法。
任何帮助都是 v.appreciated :)
答案是向 API 发送您想要查询的对象。正确读取查询后,API 可以查询数据库和 return 数据。
这是一个分步示例:
angular控制器
就我而言,我想创建一个查询,其中包含自动生成的数组中的多个项目。为简单起见:
var randomUsernames = [
'bill', 'ben', 'james', 'phil'
];
然后我们为Rest创建一个对象angular:
var objectForRestangular = {
randomUsernames : randomUsernames
}
现在我们可以休息了angular customGET
承诺:
Restangular.all('api').customGET('messages', objectForRestangular).then(function (data){
$scope.items = data;
}, function (err){
console.warn('oh no!', err);
});
这将生成一个 api 端点,如下所示:
/api/messages?randomUsernames=bill&randomUsernames=ben&randomUsernames=james
节点API
我们可以使用express的req.query
来引用路由中的字符串参数:
router.route('/messages')
.get(function (req, res) {
var usernames = req.query.randomUsernames;
console.log('we have ' + usernames.length + ' usernames: ' + usernames)
});
正在查询数据库
示例对象:
{
_id: '123123123123123'
username: 'thor',
time: '09/08/2015',
copy: 'hey guys, have you seen this? http://random.org',
userLikes: [
{
username: 'bill', //check this for a match
_id: '34567890'
},
{
username: 'ben', //check this for a match
_id: '67890132'
}
]
},
{ ... },
{ ... }
我想 return 嵌套数组 userLikes
.
中包含查询 randomUsernames
匹配值的任何对象
我正在使用 Mongoose 进行数据库操作,因此我们可以使用 $in
operator。它非常适合这样的查询。总计:
router.route('/messages')
.get(function (req, res) {
var usernames = req.query.randomUsernames;
console.log('we have ' + usernames.length + ' usernames: ' + usernames)
Message.find( { username: { $in: userLikes } }, function (err, messages) {
if (err) {
res.send(err);
} else {
res.json(messages);
}
});
});
所以现在您可以使用 Restangular 的 customGET
方法向 API 发送查询,后者查询数据库,然后 returns 数据. :-)
如果有人感兴趣,可以查看此示例以及更多 here。
请注意,此答案中的示例只是模拟数据(例如,'messages'、'Message' 等)。
我正在学习 MEAN 堆栈。我有一个节点 api 连接到 MongoLab 托管数据库。
api returns 个对象是这样的 (api/messages
):
[
{
_id: "55074ce3c21903c9cce6d02a",
name: "some random message",
__v: 0
},
{
_id: "55074e4a1dad546fcef09769",
name: "a different message",
__v: 0
},
{
_id: "55074e4a1dad546fcef09123",
name: "bingo",
__v: 0
}
]
使用 restangular,我获取数据然后绑定到 $scope
:
Restangular.all('api/messages').getList().then(function (data){
$scope.messages = data;
});
在应用程序的一部分中,我只想 query/return 必要的数据 - 像这样:
Restangular.all('api/messages').customGET('', {"q": {"name": "a different message" }}).then(function (data) {
console.log(data);
});
我只想 return 个包含 X 的对象 - 在本例中,'a different message'。
然而,customGET
方法似乎并没有像我预期的那样工作;我总是得到 所有 个对象。
我怎样才能做到这一点?我一直在搜索和尝试一段时间但没有成功。也许我需要添加一些 api 路由和方法。
任何帮助都是 v.appreciated :)
答案是向 API 发送您想要查询的对象。正确读取查询后,API 可以查询数据库和 return 数据。
这是一个分步示例:
angular控制器
就我而言,我想创建一个查询,其中包含自动生成的数组中的多个项目。为简单起见:
var randomUsernames = [
'bill', 'ben', 'james', 'phil'
];
然后我们为Rest创建一个对象angular:
var objectForRestangular = {
randomUsernames : randomUsernames
}
现在我们可以休息了angular customGET
承诺:
Restangular.all('api').customGET('messages', objectForRestangular).then(function (data){
$scope.items = data;
}, function (err){
console.warn('oh no!', err);
});
这将生成一个 api 端点,如下所示:
/api/messages?randomUsernames=bill&randomUsernames=ben&randomUsernames=james
节点API
我们可以使用express的req.query
来引用路由中的字符串参数:
router.route('/messages')
.get(function (req, res) {
var usernames = req.query.randomUsernames;
console.log('we have ' + usernames.length + ' usernames: ' + usernames)
});
正在查询数据库
示例对象:
{
_id: '123123123123123'
username: 'thor',
time: '09/08/2015',
copy: 'hey guys, have you seen this? http://random.org',
userLikes: [
{
username: 'bill', //check this for a match
_id: '34567890'
},
{
username: 'ben', //check this for a match
_id: '67890132'
}
]
},
{ ... },
{ ... }
我想 return 嵌套数组 userLikes
.
randomUsernames
匹配值的任何对象
我正在使用 Mongoose 进行数据库操作,因此我们可以使用 $in
operator。它非常适合这样的查询。总计:
router.route('/messages')
.get(function (req, res) {
var usernames = req.query.randomUsernames;
console.log('we have ' + usernames.length + ' usernames: ' + usernames)
Message.find( { username: { $in: userLikes } }, function (err, messages) {
if (err) {
res.send(err);
} else {
res.json(messages);
}
});
});
所以现在您可以使用 Restangular 的 customGET
方法向 API 发送查询,后者查询数据库,然后 returns 数据. :-)
如果有人感兴趣,可以查看此示例以及更多 here。
请注意,此答案中的示例只是模拟数据(例如,'messages'、'Message' 等)。