2017-04-07 166 views
-1

我試圖在我的移動應用程序上使用nodejs的API後端實現find()函數。因此API的路線是這樣的:Node.js API響應空json

app.use('/api', apiRoutes); 
apiRoutes.use('/rooms', roomRoutes); 
roomRoutes.post('/search', RoomController.searchRooms); 

這是我的控制器,與空的JSON所有的時間響應函數:

exports.searchRooms = function (req, res) { 
Room.find({ 
    type: req.body.roomType, 
    beds: req.body.beds, 
    max_occupancy: { $gt: req.body.guests }, 
    cost_per_night: { $gte: req.body.priceRange.lower, $lte: req.body.priceRange.upper }, 
    reserved: { 
     $not: { 
      $elemMatch: { from: { $lt: req.body.to.substring(0, 10) }, to: { $gt: req.body.from.substring(0, 10) } } 
     } 

    } 
}, function (err, rooms) { 
    if (err) { 
     res.send(err); 
    } else { 
     res.json(rooms); 
    } 
}); 

}

該功能尋找酒店的免費客房。 這是我如何調用API從我的應用程序:

searchRooms(options){ 
return new Promise(resolve => { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    this.http.post('http://localhost:8080/api/rooms/search', JSON.stringify(options), {headers: headers}) 
    .map(res => res.json()) 
    .subscribe(data => { 
     resolve(data); 
    }); 
}); 

}

任何人都可以點我怎麼可能是錯的?

+0

您確定需要將請求中的選項串聯起來嗎?你做了什麼樣的調試('console.log(req.body)' - 服務器是否收到請求數據?)如果你打印出查詢並在數據庫中手動運行它,它是否會返回文檔? – JJJ

+0

是的,我已經做到了這一點,服務器正在接收請求數據,我也記錄(res.body),它返回空數組,所以我的方法必須有錯誤。我可以在我的mongo數據庫中瀏覽集合,並且有用於測試目的的示例數據。 –

回答

0

問題是與

max_occupancy: { $gt: req.body.guests } 

應該有$gte =大於或等於,不僅大於。

0

我認爲您的參數可能無法正確傳遞。也許你可以調試控制器並檢查。具體而言,我不確定JSON.stringify(options)是否已正確映射到嘗試獲取它們的代碼中(例如$ gte:req.body.priceRange.lower)。