在 Angular 应用程序中使用 Mongoose 查询 MongoDB
Query MongoDB with Mongoose within Angular App
我有一个应用程序需要查询我的 Mongo 数据库和 return 所有符合指定条件的项目,以便它们可以呈现给 DOM。我已经通过我的应用程序通过邮递员和本地测试了数据库,因此我确定所有信息都已正确存储。我的问题是我不完全知道在我的应用程序中应该在哪里进行查询。
用户将使用下拉列表来指定一种业务类型,一旦完成,所有匹配此类型的业务都应填充 DOM。以下是我到目前为止的代码:
这是用户控制器:
angular.module('UserCtrl', [])
.controller('UserSelectController', function($scope, queryFactory) {
//list out all of our specialty types of food in the below array -- this will populate in our dropdown selection for our user_BusDirectory.html view
$scope.listOfTypes = ['Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8'];
//invoke function to call a GET request to get business with that type of specialty
$scope.getBusiness = function(){
console.log('You selected: ', $scope.selectedType);
queryFactory.queryType($scope.selectedType);
};
});
以下人员在我厂:
angular.module('queryService', [])
.factory('queryFactory', function($http){
var queryType = function(type){
console.log('What is the type that has been passed in: ',type)
var query = businesses.find({specialty: type}).exec(function(err, businessMatches){
if(err){
console.log(err);
return res.send({ errorMessage : err})
}else{
res.json(businessMatches);
}
});
console.log("Did query recieve all the types? :", query);
}
return {
queryType: queryType
}
});
在我的 Mongo 数据库中 businesses
是我要查询的集合的名称。当我尝试测试使我相信我的方法被误导的功能时,我不断收到 ReferenceError: businesses is not defined
。
'businesses' 未定义,因为尚未分配。您的代码缺少任何用于检索数据的服务器调用。您需要:
- 获取数据的 REST 调用
- 建议在服务器调用中传递 'type',这样端点 return 只需要数据。
- queryType 应该 return 一个在数据 returned 时解析的承诺 ($q)。
我花了一些时间给你和想法你的结构应该是什么样子。
服务器上的 API 处理程序应如下所示:
app.get('api/businesses', function(req, res) {
Businesses.find({specialty: req.query.type})
.then(function(businesses){
res.json(businesses);
})
.catch(function(error){
console.log("There was error retrieving businesses" + error);
});
});
在前端,进行 http 调用的工厂应该如下所示:
angular.module('queryService', [])
.factory('queryFactory', function($http){
var getBusinesses = function(type) {
return $http({
method: 'GET',
url: 'api/businesses?type=' + type
})
};
return {
getBusinesses: getBusinesses
}
});
控制器必须在响应返回后对数据做一些事情:
angular.module('UserCtrl', [])
.controller('UserSelectController', function($scope, queryFactory) {
$scope.listOfTypes = ['Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8'];
$scope.getBusiness = function(){
queryFactory.getBusinesses($scope.selectedType)
.then(function(response){
// do something with response.data
// put it on $scope.businesses
});
};
});
我有一个应用程序需要查询我的 Mongo 数据库和 return 所有符合指定条件的项目,以便它们可以呈现给 DOM。我已经通过我的应用程序通过邮递员和本地测试了数据库,因此我确定所有信息都已正确存储。我的问题是我不完全知道在我的应用程序中应该在哪里进行查询。
用户将使用下拉列表来指定一种业务类型,一旦完成,所有匹配此类型的业务都应填充 DOM。以下是我到目前为止的代码:
这是用户控制器:
angular.module('UserCtrl', [])
.controller('UserSelectController', function($scope, queryFactory) {
//list out all of our specialty types of food in the below array -- this will populate in our dropdown selection for our user_BusDirectory.html view
$scope.listOfTypes = ['Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8'];
//invoke function to call a GET request to get business with that type of specialty
$scope.getBusiness = function(){
console.log('You selected: ', $scope.selectedType);
queryFactory.queryType($scope.selectedType);
};
});
以下人员在我厂:
angular.module('queryService', [])
.factory('queryFactory', function($http){
var queryType = function(type){
console.log('What is the type that has been passed in: ',type)
var query = businesses.find({specialty: type}).exec(function(err, businessMatches){
if(err){
console.log(err);
return res.send({ errorMessage : err})
}else{
res.json(businessMatches);
}
});
console.log("Did query recieve all the types? :", query);
}
return {
queryType: queryType
}
});
在我的 Mongo 数据库中 businesses
是我要查询的集合的名称。当我尝试测试使我相信我的方法被误导的功能时,我不断收到 ReferenceError: businesses is not defined
。
'businesses' 未定义,因为尚未分配。您的代码缺少任何用于检索数据的服务器调用。您需要:
- 获取数据的 REST 调用
- 建议在服务器调用中传递 'type',这样端点 return 只需要数据。
- queryType 应该 return 一个在数据 returned 时解析的承诺 ($q)。
我花了一些时间给你和想法你的结构应该是什么样子。 服务器上的 API 处理程序应如下所示:
app.get('api/businesses', function(req, res) {
Businesses.find({specialty: req.query.type})
.then(function(businesses){
res.json(businesses);
})
.catch(function(error){
console.log("There was error retrieving businesses" + error);
});
});
在前端,进行 http 调用的工厂应该如下所示:
angular.module('queryService', [])
.factory('queryFactory', function($http){
var getBusinesses = function(type) {
return $http({
method: 'GET',
url: 'api/businesses?type=' + type
})
};
return {
getBusinesses: getBusinesses
}
});
控制器必须在响应返回后对数据做一些事情:
angular.module('UserCtrl', [])
.controller('UserSelectController', function($scope, queryFactory) {
$scope.listOfTypes = ['Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8'];
$scope.getBusiness = function(){
queryFactory.getBusinesses($scope.selectedType)
.then(function(response){
// do something with response.data
// put it on $scope.businesses
});
};
});