作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将缓存层添加到我的 typescript 项目中。当我搜索时,我在媒体 How to add a Redis cache layer to Mongoose in Node.js 上找到了一篇文章
他通过在mongoose.Query.prototype
中添加一个函数来实现缓存
mongoose.Query.prototype.cache = function(options = { time: 60 }) {
this.useCache = true;
this.time = options.time;
this.hashKey = JSON.stringify(options.key || this.mongooseCollection.name);
return this;
};
然后在 mongoose.Query.prototype.exec
中检查查询是否启用了缓存
mongoose.Query.prototype.exec = async function() {
if (!this.useCache) {
return await exec.apply(this, arguments);
}
const key = JSON.stringify({
...this.getFilter(),
});
console.log(this.getFilter());
console.log(this.hashKey);
const cacheValue = await client.hget(this.hashKey, key);
if (cacheValue) {
const doc = JSON.parse(cacheValue);
console.log("Response from Redis");
return Array.isArray(doc)
? doc.map((d) => new this.model(d))
: new this.model(doc);
}
const result = await exec.apply(this, arguments);
return result;
};
现在通过在 mongoose 查询中调用 cache() 函数来启用缓存
books = await Book.find({ author: req.query.author }).cache();
一切正常,然后我尝试将它转换为 typescript ,但我不知道如何为其添加类型定义
typescript 版本总是报错
Property 'cache' does not exist on type 'Query<any>',
Property 'useCache' does not exist on type 'Query<any>',
Property 'hashKey' does not exist on type 'Query<any>',
有什么方法可以将这些类型添加到“查询”中吗?请帮助我
最佳答案
我最终通过执行以下操作使它正常工作。另见 https://stackoverflow.com/a/70656849/1435970
创建文件 /src/@types/mongoose.d.ts
并向其中添加以下内容:
type CacheOptions = {key?: string; time?: number}
declare module 'mongoose' {
interface DocumentQuery<T, DocType extends import('mongoose').Document, QueryHelpers = {}> {
mongooseCollection: {
name: any
}
cache(options?: CacheOptions): any
useCache: boolean
hashKey: string
}
interface Query<ResultType, DocType, THelpers = {}, RawDocType = DocType> extends DocumentQuery<any, any> {}
}
关于typescript - 如何为 mongoose 'Query<any>' 添加类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64980067/
我是一名优秀的程序员,十分优秀!