错误:.find(...) 不是函数 nodejs mongoose

Posted

技术标签:

【中文标题】错误:.find(...) 不是函数 nodejs mongoose【英文标题】:error : .find(…) is not a function nodejs mongoose 【发布时间】:2021-08-28 15:50:13 【问题描述】:

我定义了一个控制器,代码如下:

const  paymentModel = require("../../models/University");
class PaymentController 
async getPaymentList(req , res)
   const list = await paymentModel.find() 
   .select("amount  description  payDate payId" ).limit(20);
   res.send(list);

像下面这样的路由器:

const router = require ("express").Router();
const controller = require("../http/controller/PaymentController");
router.get('/' ,controller.getPaymentList);
module.exports= router;

型号:

 const mongoose = require ("mongoose");
 const schemaPay = new mongoose.Schema(
 payId  :type:Number, required: true,
 amount :type :String , required: true,
 description :type :String , required:true,
 courseId:[schemaCourse] ,
 studentId:[schemaStudent],
 payDate :String ,
 );
 const paymentModel= mongoose.model('StudentPayments' , schemaPay); 
 module.exports=paymentModel ;

当我使用邮递员测试 api 时出现错误:paymentModel.find 不是函数 谁能帮我看看问题出在哪里?

【问题讨论】:

您正在将 paymentModel 导出到一个对象中,所以 const paymentModel = require('....') 而不是 const paymentModel = require('...') 您已经创建了 schemaPay 并导出了 paymentModel 这就是它给出错误的原因 更改您的导出module.exports = mongoose.model('schemaPay', schemaPay); 我忘记粘贴这部分代码:const paymentModel= mongoose.model('StudentPayments' , schemaPay); 我有几个模型,所以我使用 导出所有模型 【参考方案1】:

对于您的模型,您正在导出一个包含密钥 paymentModel 的对象。

为了从该对象内部访问 paymentModel,您必须执行以下操作之一:

const  paymentModel = require("../../models/University");

const  UniversityModel = require("../../models/University"); //then access paymentModel like UniversityModel.paymentModel

如果您不想这样做,也可以只导出一个特定模型,但您说您有多个导出,所以是的。

【讨论】:

以上是关于错误:.find(...) 不是函数 nodejs mongoose的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:Task.find 不是 Node Js 中的函数

Nodejs 中间件 .pre 显示不是函数

NodeJS - .save() 不是一个函数。无法通过猫鼬创建集合

nodejs/express express.createserver 不是函数

nodejs 471错误 cannot find module ‘文件夹名’

nodejs , mongo find 没有返回数据