猫鼬中的链式静态方法不起作用
Posted
技术标签:
【中文标题】猫鼬中的链式静态方法不起作用【英文标题】:chain static methods in mongoose doesn't work 【发布时间】:2018-10-28 14:32:09 【问题描述】:我在 es6 中尝试了静态方法,知道为什么我不能像下面这样链接我的静态方法吗?甚至可以链接 2 个静态方法吗?
//nameModel.js
const schema = new mongoose.Schema( name: String )
class NameClass
static async findAll()
return this.find()
schema.loadClass(NameClass)
export const model = initModel('NameSchema', schema)
//controller.js
import model as NameModel from '../models/nameModel'
export default () => async (req, res)
try
const test = await NameModel.findAll()
console.log('test', test) //have all the records
const response = await NameModel.findAll().sort('-name') // NameMode.sort is not a function
catch (e)
console.log(e)
猫鼬模式中的静态和非静态方法有什么区别?我很困惑,因为文档只显示代码示例。我觉得这是多余的,因为它没有显示两个 http://mongoosejs.com/docs/advanced_schemas.html 之间的区别
【问题讨论】:
【参考方案1】:静态方法中的this
是指类函数本身,因为它定义为类的方法。
class NameClass
static async findAll()
return this.find()
等于:
class NameClass
NameClass.findAll = async function()
return this.find()
见MDN Classes
【讨论】:
所以我应该返回 NameModel,find() 而不是 this.find() 以便进行“链接”? Noop,因为异步函数返回一个promise,所以NameModel.findAll()
返回一个native promise实例。试试const query = await NameModel.findAll(); const response = query.sort('-name')
。
query
已经是响应对象,它没有sort
的方法。
@Melissa92 你说得对,我对 Mongoose 不是很熟悉,但是在阅读了一些文档之后,也许我们可以更改 findAll
静态方法的返回值。 static async findAll() return () => this.find()
,然后是 const query = await NameModel.findAll(); const response = query().sort('-name')
。希望能有所帮助。
哦,好的,返回整个函数,稍后再试。以上是关于猫鼬中的链式静态方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章