簡體   English   中英

如何在貓鼬中檢查有效的對象 ID?

[英]How to check for a valid Object Id in mongoose?

我有一條從對象 ID 返回特定故事的路線。 當我嘗試測試它時,它給了我一些錯誤。 if 塊中的代碼沒有以某種方式執行。

 router.get("/:id",async (req,res) => { try{ if (!isValidObjectId(req.params.userId)) { res.status(401).json({ message: "Invalid object id", success: false }) throw new Error("Invalid object id") } let story = await Story.findById(req.params.id) .populate('user') .lean() if (!story) { return res.status(404).json({ message: "Story not found", success: false }) } const text = convert(story.body, { wordwrap: null }); res.render('stories/show',{ story, title: `${story.title} Storybooks`, desc: `${text}` }) } catch(err) { console.error(err) } })

如果 id 無效,我不想執行查詢,比如/stories/blabla

我怎樣才能做到這一點?

感謝您的回復。

對於那些在這個問題上苦苦掙扎的人來說,這里是一個節省時間的方法:

首先,我們我們方法isValidmongoose.Types.ObjectId則作為第二檢查,我們創建一個實際的對象ID的比較,它作為一個字符串。

以下是您將如何導入和使用它:

 const mongoose = require('mongoose'); const {Types: {ObjectId}} = mongoose; const validateObjectId = (id) => ObjectId.isValid(id) && (new ObjectId(id)).toString() === id; //true or false

至於回答我自己的問題:

 const mongoose = require('mongoose'); const {Types: {ObjectId}} = mongoose; const validateObjectId = (id) => ObjectId.isValid(id) && (new ObjectId(id)).toString() === id; //true or false // @desc Show a single story // @route GET /stories/:id router.get("/:id",async (req,res) => { try{ if (!validateObjectId(req.params.id)) { throw Error("Invalid object Id") } let story = await Story.findById(req.params.id) .populate('user') .lean() if (!story) { return res.status(404).json({ message: "Story not found", success: false }) } const text = convert(story.body, { wordwrap: null }); res.render('stories/show',{ story, title: `${story.title} Storybooks`, desc: `${text}` }) } catch(err) { console.error(err) } })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM