使用AngularJS和NodeJS、MongoDB进行动态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并检

我真的不明白如何处理附加了查询的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;
};