我正在嘗試根據三個欄位中的任何一個在資料庫中查找用戶。在郵遞員中,我有以下路徑
http://localhost:8082/api/users/617473029f80eda3643a7fdd
http://localhost:8082/api/users/Michael
http://localhost:8082/api/users/25
目前在我的資料庫中,我擁有不同用戶的所有這些值。所以這個想法是 path1 回傳具有該 id 的用戶,path2 回傳具有該名稱的用戶,以及具有該年齡的 path3 用戶。僅供參考:我正在對此進行測驗,因此到目前為止這些欄位值是唯一的,并且資料庫欄位中沒有重復。
使用以下代碼,唯一回傳的是當我傳入 id 時,但整個資料庫都回傳。當我傳遞姓名或年齡時,沒有任何回報
router.get('/:id', (req, res) => {
User.find( { $or: [
{"_id": req.params.id},
{"name": req.params.name},
{"age": req.params.age}
]})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))
});
謝謝!
編輯:以下對我有用
router.get('/:id', (req, res) => {
User.find({$or: [
{name: req.params.id},
{age: req.params.id}
]})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '*** No User Found ***'}));
});
唯一的問題是它沒有捕捉到錯誤,所以在郵遞員中測驗我發送的任何不是匹配的東西只是回傳一個空陣列而不是錯誤。不確定這將如何影響程式本身或者是否可以
uj5u.com熱心網友回復:
req.params.name或req.params.age將是未定義的,因為路由引數是req.params.id。要使其正常作業,您必須僅通過此路由引數查找值。欄位名稱更改,但值 -req.params.id保持不變。
User.find( { $or: [
{"_id": req.params.id},
{"name": req.params.id},
{"age": req.params.id}
]})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))
可選:對于將來的使用,重命名id為slug更好的選擇,因為這與架構上的所有其他欄位都很好。
uj5u.com熱心網友回復:
這就是 mongodb 在您通過undefined/null它時回傳結果的方式,它將其視為find({}).
您需要檢查name/ 是否age存在。我很確定這條路線不會使用名稱/年齡,而是_id只使用,所以你為什么不只通過_id;
router.get('/:id', (req, res) => {
// check what is available in req.params - name/age/id
// based on it create query and run it
User.find({"_id": req.params.id})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))
});
你應該檢查這個鏈接。
uj5u.com熱心網友回復:
您不能為每個請求引數設定不同的名稱,因此
req.params.id必須只是一個 id,并且不能通過名稱獲得req.params.name
嘗試發送通過查詢引數提交的請求,可能會更容易。我會保留:id端點,這只是通過 id 請求一個用戶的常用方法,并為所有其他請求創建另一個端點。
uj5u.com熱心網友回復:
原因是因為您已指定'/:id'為端點。因此,這將起作用,但其余的不起作用。要解決這個問題,您需要為每個請求創建單獨的路由,而不是將它們合二為一。
router.get('/:id', (req, res) => {
User.find({"_id": req.params.id})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))
});
router.get('/name', (req, res) => {
User.find({"name": req.params.name})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))
});
router.get('/age', (req, res) => {
User.find({"age": req.params.age})
.then(user => res.json(user))
.catch(err => res.status(404).json({nouserfound: '***NoUserFound***'}))
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/348496.html
標籤:javascript 节点.js 数据库 MongoDB 表达
