使用AngularJS和NodeJS、MongoDB进行动态URL查询
我真的不明白如何处理附加了查询的URL 我有接受多个参数的端点,如:使用AngularJS和NodeJS、MongoDB进行动态URL查询,angularjs,node.js,mongodb,query-string,Angularjs,Node.js,Mongodb,Query String,我真的不明白如何处理附加了查询的URL 我有接受多个参数的端点,如: ?max_length=50, ?min_length=1, ?active=true, ?only_today=true, ?etc... 通过AngularJS,如何仅在用户已检查这些值的情况下动态设置这些值 实际上,我只是在$scope不为null时构建一个对象{}附加这些参数。但我认为这不是一个好主意 NodeJS和MongoDB也一样。。。 如何根据URL上的查询字符串获取正确的对象 我在这里做的也是拆分URL并检
?max_length=50,
?min_length=1,
?active=true,
?only_today=true,
?etc...
通过AngularJS,如何仅在用户已检查这些值的情况下动态设置这些值
实际上,我只是在$scope不为null时构建一个对象{}
附加这些参数。但我认为这不是一个好主意
NodeJS和MongoDB也一样。。。
如何根据URL上的查询字符串获取正确的对象
我在这里做的也是拆分URL并检查单词,等等。。。我确信有更好的方法,我在两个文档中都找不到,我想知道越来越大的URL参数,它开始变成地狱
我知道这是一个很低级的问题,但我真的不知道如何处理它
谢谢您可以使用$location服务
您可以使用$location服务来实现这一点
您可以使用
$resource
轻松地将端点映射到服务。您应该将参数映射到api中预期的参数。如果您有条件参数,则需要在后端处理未定义的参数并忽略这些参数。要在nodeJS中映射端点,请签出
例如:
angular.module("myApp", []).factory("myFactory", function($resource) {
var YourResource = $resource('/rest/yourResource');
var factory = {
retriveMyResources: function(paramsQuery) {
return YourResource.query(paramsQuery).$promise;
}
};
return factory;
}).controller("myCtrl", function($scope, myFactory) {
myFactory.retrieveMyResources({
maxLength: $scope.maxLength,
sortBy: $scope.sortBy
}).then(function(result) {
$scope.result = result
})
})
您的节点服务器
//App.js you initialize your server, and include your route files
(function() {
var restify = require("restify");
var server = restify.createServer({
name: "test-server"
});
server.pre(restify.CORS());
server.use(restify.gzipResponse());
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.jsonp());
require("./routes/your_resource_route.js")(server);
server.listen("1921", function() {
console.log('%s listening at %s environment: %s', server.name, server.url, process.env.NODE_ENV);
});
})();
示例路由文件
module.exports = function(server) {
var yourResourceService = require("services/your_resource_service.js");
server.get("rest/yourResource",
function(req, res, next) {
return yourResourceService.findResources(req.params.maxLength, req.params.sortBy).then(function(resources) {
res.send(200, resources);
next();
}).catch(function(err) {
res.send(500, err);
next();
}).done();
}
);
}
还有你的服务文件
module.exports = function(app_context) {
var exampleService = {
findItems: function(maxLength, sortBy) {
var sortObject = {};
sortObject[sortBy || DEFAULT_SORT] = -1;
return Q(brandMongooseCollection.find({}).sort(sortObject).limit(maxLength || DEFAULT_MAX_LENGTH).lean().exec());
}
};
return exampleService;
};
您可以使用
$resource
轻松地将端点映射到服务。您应该将参数映射到api中预期的参数。如果您有条件参数,则需要在后端处理未定义的参数并忽略这些参数。要在nodeJS中映射端点,请签出
例如:
angular.module("myApp", []).factory("myFactory", function($resource) {
var YourResource = $resource('/rest/yourResource');
var factory = {
retriveMyResources: function(paramsQuery) {
return YourResource.query(paramsQuery).$promise;
}
};
return factory;
}).controller("myCtrl", function($scope, myFactory) {
myFactory.retrieveMyResources({
maxLength: $scope.maxLength,
sortBy: $scope.sortBy
}).then(function(result) {
$scope.result = result
})
})
您的节点服务器
//App.js you initialize your server, and include your route files
(function() {
var restify = require("restify");
var server = restify.createServer({
name: "test-server"
});
server.pre(restify.CORS());
server.use(restify.gzipResponse());
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.use(restify.jsonp());
require("./routes/your_resource_route.js")(server);
server.listen("1921", function() {
console.log('%s listening at %s environment: %s', server.name, server.url, process.env.NODE_ENV);
});
})();
示例路由文件
module.exports = function(server) {
var yourResourceService = require("services/your_resource_service.js");
server.get("rest/yourResource",
function(req, res, next) {
return yourResourceService.findResources(req.params.maxLength, req.params.sortBy).then(function(resources) {
res.send(200, resources);
next();
}).catch(function(err) {
res.send(500, err);
next();
}).done();
}
);
}
还有你的服务文件
module.exports = function(app_context) {
var exampleService = {
findItems: function(maxLength, sortBy) {
var sortObject = {};
sortObject[sortBy || DEFAULT_SORT] = -1;
return Q(brandMongooseCollection.find({}).sort(sortObject).limit(maxLength || DEFAULT_MAX_LENGTH).lean().exec());
}
};
return exampleService;
};