如何从mongo查询/投影返回格式化的响应?



我试图创建一个API来验证促销码。我对mongo和后台的经验很少,所以我有点困惑,什么是最好的方法来做我想要完成的事情。

我在客户端有这个PromoCode表单。当用户键入促销码,我想为我的后端

  1. 验证代码是否存在于docs.
  2. 如果存在,则返回codevaluecouponId
  3. 如果代码不存在则返回错误。

我的db的结构是这样的。用户将在codes: []

中输入其中一个代码。
{
"_id": {
"$oid": "603f7a3b52e0233dd23bef79"
},
"couponId": "rate50",
"value": 50,
"codes": ["K3D01XJ50", "2PACYFN50", "COKRHEQ50"]
},
{
"_id": {
"$oid": "603f799d52e0233dd23bef78"
},
"couponId": "rate100",
"value": 100,
"codes": ["rdJ2ZMF100", "GKAAYLP100", "B9QZILN100"]
}

我的路由结构是这样的:

router.post('/promoCode', (req, res, next) => {
const { promoCode } =  req.body;
console.log('this is the req.body.promoCode on /promoCode', promoCode)
if (!promoCode) {
throw new Error('A promoCode needs to be passed')
}
promoCodesModel
.validatePromoCode(req.body.promoCode)
.then((response) => {
console.log('response inside /promoCode', response)
res.status(200).json({ data: response })
})
.catch((error) => {
res.status(400).json({ result: 'nok', error: error })
})
})

validatePromoCode函数如下:


const validatePromoCode = async (code) => {
try {
let promoCode = await PromoCodesModel.find(
{"codes": code},
{_id: 0, codes: { $elemMatch: { $eq: code }} })
console.log('This is the promocode', promoCode)

return promoCode
} catch (err) {
throw new Error (err.stack)
}
}

所有这些似乎都可以工作,因为当代码输入正确时,我得到以下响应

{
"data": [
{
"codes": [
"COKRHEQ50"
]
}
]
}
当输入错误时,我得到
{
"data": []
}

我想要的是。(我怎样才能做到这一点?)由于

// when typed correctly
{
"data": { value: 50, couponId: "rate50", code: "COKRHEQ50" }
}

// when typed incorrectly
{
"error": "this is not valid code"
}

TL;博士:我想从mongo查询中返回一个带有特定值的格式化查询,如果该值不存在于文档对象中,则返回一个错误对象。

好了,我明白了

能够得到这个响应(我想要的):

{
"data": [
{
"codes": [
"K3D01XJ50"
],
"couponId": "rate50",
"value": 50
}
]
}

我最终不得不在validatePromoCode

上这样做
onst validatePromoCode = async (code) => {
try {
let promoCode = await PromoCodesModel.find(
{ codes: code },
{ _id: 0, codes: { $elemMatch: { $eq: code } }, couponId: 1, value: 1 },
)
return promoCode
} catch (err) {
throw new Error(err.stack)
}
}

但是有更好的方法吗?由于

相关内容

  • 没有找到相关文章

最新更新