Using Mongoose ORM for MongoDB
我已经声明了一个猫鼬静态方法,如下所示:
ConvoDataSchema.statics.randomItem = async function () { ... }
然后用它创建一个模型
const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)
但稍后当我想调用该方法时:
let convoData = await ConvoData.randomItem()
我的棉绒不知道ConvoData
有猫鼬修补的这种神奇方法。
如何声明这些方法,以便 Linter(TSLint/VSCode 智能感知(可以正确发现这些方法?
你可以告诉 ESLint "忽略"这样的行,或者你可以变得非常奇怪并做这样的事情:
let convoData = await ConvoDataSchema.statics.randomItem.call(ConvoData)
糟糕的是,这两种解决方案都不像我希望的那样优雅。
查看文档,我发现: https://mongoosejs.com/docs/guide.html#statics
不要使用 ES6 箭头函数 (=>( 声明静态。箭头函数显式阻止绑定此内容,因此上述示例将不起作用,因为它的值。
这可能是你的问题吗?
现在我在大多数项目中都使用打字稿,由于上述一些原因以及更多原因,猫鼬击败了获得体面的智能感,我的解决方案是不使用猫鼬......
如果完全像这样声明:
ConvoDataSchema.statics.randomItem = async function () {
const ConvoData = mongoose.model('ConvoData', ConvoDataSchema)
它不起作用,因为该方法未关闭。您应该尝试关闭该方法。此外,该方法究竟返回了什么,这样,我们就可以正确调试该方法。