Поиск MongoDB с использованием переменной, отправленной с клиента

0

Я использую 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, я передаю статическую строку "Яблоко". Я хочу заменить это на $ ropeeparams ': fruit', который я перечислил в Route.

Пожалуйста помоги.

Теги:
express
mongojs

1 ответ

1
Лучший ответ

Вам необходимо передать url param: 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);
    });
});

EDIT: Просто прочитайте, что вы используете mongojs. Вы должны уметь:

app.get('/api/find', function(req, res){

    db.Fruits.find({code:req.query.fruit}, function (err, docs) {
        return res.json(docs);
    });
});
  • 0
    Большое спасибо. Работал хорошо ....

Ещё вопросы

Сообщество Overcoder
Наверх
Меню