使用客户端发送的变量搜索 MongoDB

Search MongoDB using a variable sent from client

我在 Angular 的 Node 项目中使用 MongoJS,并尝试根据变量查找文档。

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'。我想用我在 Route 中列出的 $routeparams ':fruit' 替换它。

请帮忙

您需要将 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);
                    }
                })
        }     

    }         
})

服务器: 我通常使用猫鼬,但您可能会使用 .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);
    });
});