[英]Node js - app.get method with query params - internal server error
Controller.js
function _loadMoreItems() {
console.log("load more items");
var paginate = {
page : $scope.page,
perPage : $scope.perPage
};
ItemService.loadItems(paginate).then(function(result){
console.log("pagination done");
console.log("result");
console.log(result);
console.log("result length");
console.log(result.length);
for(var i=0;i<result.length;i++){
$scope.itemList.push(result[i]);
}
$scope.page = $scope.page + 1;
},function(err){
console.log("error");
console.log(err);
});
}
Service.js -ItemService
angular.module("myapp.item")
.factory("myapp.item.service", ['Restangular',
function(Restangular) {
var restAngular = Restangular.withConfig(function(Configurer) {
Configurer.setBaseUrl('/api/item');
});
return {
create: restAngular.all('')
.post,
loadItems: function(paginate) {
return restAngular.all('query').getList(paginate);
}
}
}
]);
Here I pass the paginate object as query param.
以下是我在節點js中的路線。
ApiRouter.get('/query',auth.requiresLogin, ApiCtrl.load);
下面是我的節點js方法來處理獲取。
exports.load = function(req, res) {
console.log("req query");
console.log(req.query);
var myList=[];
return res.status(200)
.send(myList);
};
我收到以下錯誤。
http://localhost:3000/api/item/query?page=0&perPage=3 500 (Internal Server Error)
錯誤跟蹤
CastError: Cast to ObjectId failed for value "query" at path "_id"
at ObjectId.cast (D:\Branching\8OctItemPagination\myapp.io\node_modules\mongoose\lib\schema\ob
jectid.js:116:13)
at ObjectId.castForQuery (D:\Branching\8OctItemPagination\myapp.io\node_modules\mongoose\lib\s
chema\objectid.js:165:17)
at Query.cast (D:\Branching\8OctItemPagination\myapp.io\node_modules\mongoose\lib\query.js:233
6:32)
at Query.findOne (D:\Branching\8OctItemPagination\myapp.io\node_modules\mongoose\lib\query.js:
1118:10)
at Query.exec (D:\Branching\8OctItemPagination\myapp.io\node_modules\mongoose\node_modules\mqu
ery\lib\mquery.js:2213:16)
at Query.exec (D:\Branching\8OctItemPagination\myapp.io\node_modules\mongoose\lib\query.js:179
7:19)
at exports.itemid (D:\Branching\8OctItemPagination\myapp.io\app\item\server\controllers\api\item-api.js:36:10)
at paramCallback (D:\Branching\8OctItemPagination\myapp.io\node_modules\express\lib\router\ind
ex.js:385:7)
at param (D:\Branching\8OctItemPagination\myapp.io\node_modules\express\lib\router\index.js:36
5:5)
at Function.proto.process_params (D:\Branching\8OctItemPagination\myapp.io\node_modules\expres
s\lib\router\index.js:391:3)
info: GET /api/item/query?page=0&perPage=3 500 24.740 ms - 0
我無緣無故收到內部服務器錯誤。 如果我將路由器中的“ getList”更改為“ post(paginate)”,則不會收到此錯誤。 我錯過了一些為getList編寫的地方。 請讓我知道我錯了。
謝謝。
看起來與另一個控制器動作匹配。 網址/api/item/query
在執行基於ID的查詢的路由之一上匹配。 我假設它類似於'/item/:id'
之類的東西。
該路由的處理程序正在嘗試使用該路由參數來查詢Mongo,可能使用findById
或類似的方法,並傳遞ID,此時其值為“ query”。
您的代碼塊正在數據庫中尋找_id為“ query”的項目。 基於常識,這對我來說聽起來不對。
loadItems: function(paginate) {
return restAngular.all('query').**getList(paginate)**;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.