我真的不明白如何处理附加了查询的网址。
我有接受几个参数的端点,如:
?max_length=50,
?min_length=1,
?active=true,
?only_today=true,
?etc...
通过AngularJS,如果用户检查了这些值,我怎样才能动态设置这些值?
实际上我只是构建一个对象{}
,当$ scope不为null时附加这些参数。但我认为这不是一个好主意。
NodeJS和MongoDB相同...... 如何根据URL上的查询字符串获取正确的对象?
我在这里做的是分割URL并检查单词等等...我确信有更好的方法,我无法在两个文档中找到它并想知道更大的和更大的网址参数开始变得很糟糕。
我知道这是一个真正的低级问题,但我真的不明白如何处理它。
由于
答案 0 :(得分:0)
您可以使用$ location服务。
答案 1 :(得分:0)
您可以使用$resource
轻松将endPoints映射到您的服务。你应该将你的参数映射到api中的预期值。如果你有条件参数,你需要在后端处理未定义的参数并忽略这些参数。要在nodeJS中映射您的端点,请查看Restify
例如:
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;
};