Поиск MongoDB с использованием переменной, отправленной с клиента
Я использую MongoJS в проекте Node с Angular и пытаюсь найти документы на основе переменной.
server.js
app.get('/api/find', function(req, res){
db.Fruits.find({code:'Apple'}).forEach(function(err, docs){
res.json(docs);
});
});
маршрут
.when('/find/:fruit', {
templateUrl: 'views/find.html',
controller: 'findCtrl',
resolve: {
result: function(searchService) {
return searchService.getResult();
}
}
})
service.js (клиент)
.factory('searchService', function($q, $http) {
return {
getResult: function() {
return $http.get('/api/find')
.then(function(response) {
if (typeof response.data === 'object') {
return response.data;
} else {
return $q.reject(response.data);
}
})
}
}
})
Controller.js
.controller('findCtrl', function($scope, result) {
$scope.result = result;
})
Как вы можете видеть в server.js, я передаю статическую строку "Apple". Я хочу заменить это на $routeparams ':fruit', который я перечислил в Route.
Пожалуйста помоги.
1 ответ
Решение
Вам нужно передать параметр url:fruit в ваш сервис поиска:
.when('/find/:fruit', {
templateUrl: 'views/find.html',
controller: 'findCtrl',
resolve: {
result: function(searchService) {
return searchService.getResult($route.current.params.fruit);
}
}
})
Служба поиска:
.factory('searchService', function($q, $http) {
return {
getResult: function(fruit) {
return $http.get('/api/find?fruit=' + fruit)
.then(function(response) {
if (typeof response.data === 'object') {
return response.data;
} else {
return $q.reject(response.data);
}
})
}
}
})
Сервер: Обычно я использую mongoose, но вы, вероятно, могли бы использовать.toArray, так как при использовании forEach выполнялись итерации по коллекции и попытки завершить ответ несколько раз.
app.get('/api/find', function(req, res){
db.Fruits.find({code:req.query.fruit}).toArray(function (err, result) {
return res.json(result);
});
});
РЕДАКТИРОВАТЬ: Просто прочитайте, что вы используете mongojs Вы должны быть в состоянии сделать:
app.get('/api/find', function(req, res){
db.Fruits.find({code:req.query.fruit}, function (err, docs) {
return res.json(docs);
});
});