gpt4 book ai didi

angularjs - 使用 Restangular 查询 Node api/MongoDB

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:56 25 4
gpt4 key购买 nike

我正在学习 MEAN 堆栈。我有一个连接到 MongoLab 托管数据库的 Node api。

API 返回这样的对象 (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,我获取数据,然后绑定(bind)到$scope:

Restangular.all('api/messages').getList().then(function (data){
$scope.messages = data;
});

在应用程序的一部分中,我只想查询/返回必要的数据 - 如下所示:

Restangular.all('api/messages').customGET('', {"q": {"name": "a different message" }}).then(function (data) {
console.log(data);
});

我只想返回包含 X 的对象 - 在本例中为“不同的消息”。

但是,customGET 方法似乎并没有按照我的预期工作;我总是得到所有对象。

我怎样才能实现这个目标?我已经搜索并尝试了一段时间但没有成功。也许我需要添加一些 api 路由和方法。

任何帮助将不胜感激:)

最佳答案

答案是向 API 发送您想要的查询的对象。正确读取查询后,API 就可以查询 DB 并返回数据。

这是一个分步示例:

Angular Controller

就我而言,我想创建一个包含自动生成的数组中的多个项目的查询。为了简单起见:

var randomUsernames = [ 
'bill', 'ben', 'james', 'phil'
];

然后我们为 Restangular 创建一个对象:

var objectForRestangular = {
randomUsernames : randomUsernames
}

现在我们可以做一个 Restangular customGET promise :

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

Node 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'
}
]
},
{ ... },
{ ... }

我想从数据库返回任何对象,这些对象包含嵌套数组 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 发送查询,该 API 查询数据库,然后返回数据。 :-)

如果有人感兴趣,这里有一个例子以及更多 here

请注意,此答案中的示例只是模拟数据(例如“消息”、“消息”等)。

关于angularjs - 使用 Restangular 查询 Node api/MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30484718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com