countDocuments()在api调用中不工作



我正在尝试使用api调用获得产品计数,但在邮差中其保持加载

router.get(`/get/count`,  async (req, res) => {
const productCount = await Product.countDocuments((count)=>count)
if (!productCount) {
res.status(500).json({ success: false });
}
res.send({
productCount: productCount
});
});
(node:28030) UnhandledPromiseRejectionWarning: MongooseError: Query was already executed: Product.countDocuments({})

没有async和await也不能工作

我试图捕捉错误,我在邮差

中得到了这个错误
{
"success": false,
"error": "Query was already executed: Product.countDocuments({})"
}

捕获错误的代码:

router.get(`/get/count`,   (req, res) => {
Product.countDocuments((count)=>count).then((pcount)=>{
if(pcount){
return res.status(200).json({success:true})
}else{
return res.status(404).json({success:false})
}
}).catch((err)=>{
return res.status(400).json({success:false, error:err.message})
})
});

认为在Mongoose操作中,您希望await提供回调,但不能两者都提供。如果尝试同时执行这两种操作,将导致它在内部执行两次查询。

试试就:

const productCount = await Product.countDocuments();

如果您想要计算产品集合中的所有产品,请尝试此

db.product.countDocuments({})
router.get(`/get/count`,  async(req, res) => {
let productCount = await Product.countDocuments();
if(!productCount){
res.send(500).json({success:false})
}
res.send({productCount: productCount})
});

有两种方法

试试你不需要使用callback (count)=>count

const express = require('express')
const router = express.Router();
const {Product} = require('../models/products')
const {Category} = require('../models/category')
const catchAsyncErrors = require('../middleware/catchAsyncError')
const mongoose = require('mongoose');

// Get all product 
router.get(`/`, async (req, res) => {
let productList = await Product.find().populate('category')
if(!productList) {
res.status(500).json({
success: false
})
}
res.status(200).json({
success: true,
count: productList.length,
productList
});
})
router.get(`/count`, catchAsyncErrors(async(req, res) => {
const countProductList = await Product.countDocuments();
if(!countProductList){
res.status(500).json({
success: false
})
}
res.send({
success: true,
countProduct: countProductList
})
}))

您不需要包含((count)=>count)
使用Product.countDocuments()代替

相关内容

  • 没有找到相关文章

最新更新