2015-08-28 75 views
1

我真的不明白如何處理附加查詢的URL。動態URL查詢與AngularJS和NodeJS,MongoDB

我有接受一些參數,如端點:

?max_length=50, 
?min_length=1, 
?active=true, 
?only_today=true, 
?etc... 

通過AngularJS我怎麼可以設置動態只有當用戶已經檢查了這些值的價值?

其實我只是建立一個對象{}當$ scope不爲空時附加這些參數。但我認爲這不是一個好主意。

相同的NodeJS和MongoDB ... 如何根據URL上的查詢字符串獲取正確的對象?

我在這裏做的也是分開URL並檢查單詞等等......我確信有更好的方法,我無法在兩個文檔中找到它,並想知道更大和更大的URL參數它開始是地獄。

我知道這是一個真正的低級別問題,但我並不真正理解如何處理它。

謝謝

回答

0

您可以使用$resource輕鬆地將終端映射到您的服務。你應該將你的參數映射到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; 
};