gpt4 book ai didi

node.js - `mongoose-lean-getters` 无法与 `find` 正常工作,调用 getter 方法两次

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:48 26 4
gpt4 key购买 nike

我正在使用lean(这使得查询更快,内存占用更少,但结果文档是普通的旧 JavaScript 对象(PO​​JO),)

默认情况下,这将阻止所有 getter 执行并提供 POJO(普通旧 java 对象),因此我们可以使用 mongoose-lean-getters 作为解决方案。根据 standard doc

架构:

const mongooseLeanGetters = require('mongoose-lean-getters');
const rateSchema = new Schema({
rate_photo: {
type: String,
get: getFullUrl
}
);

rateSchema.plugin(mongooseLeanGetters);

const Rate = mongoose.model('rates', rateSchema);

module.exports = Rate;

function getFullUrl(url) {
if (url != undefined) return `${process.env.ASSETS_URL}uploads/${url}`;
else return '';
}

问题:

model.Rate.find(condition).lean({ getters : true })

输出:

without getter :
"rate_photo": "rate/1574154457920-myw3schoolsimage.jpg",

With getter :
"rate_photo": "http://192.168.15.93:6600/assets/uploads/rate/1574154457920-myw3schoolsimage.jpg",

With lean:
"rate_photo": "rate/1574154457920-myw3schoolsimage.jpg",

With lean and findOne:
"rate_photo": "http://192.168.15.93:6600/assets/uploads/rate/1574154457920-myw3schoolsimage.jpg",

With lean and find: // <------------ ISSUE
expected result :
"rate_photo": "http://192.168.15.93:6600/assets/uploads/rate/1574154457920-myw3schoolsimage.jpg",
BUT GOT THIS :
"rate_photo": "http://192.168.15.93:6600/assets/uploads/http://192.168.15.93:6600/assets/uploads/rate/1574154457920-myw3schoolsimage.jpg",
<小时/>

我还发现了问题背后的原因,在npm包中,他们通过中间件调用getter两次第一次来自pre并且来自post的第二个,这仅适用于find方法:

module.exports = function mongooseLeanGetters(schema) {
const fn = applyGettersMiddleware(schema);
schema.pre('find', function() { //<--------------- 1st HERE
if (typeof this.map === 'function') {
this.map((res) => {
fn.call(this, res);
return res;
});
} else {
this.options.transform = (res) => {
fn.call(this, res);
return res;
};
}
});

schema.post('find', fn); //<--------------- 2nd HERE
schema.post('findOne', fn);
schema.post('findOneAndUpdate', fn);
};
<小时/>

所以,如果我注释掉其中一个,那么效果很好,但是代码由于某种原因而存在,那么有没有更好的方法可以继续?

最佳答案

该问题已在版本中解决: 0.1.2

我认为他们已经删除了这个来解决问题:

schema.post('find', fn); //<--------------- 2nd HERE

Github 上提出的问题:https://github.com/mongoosejs/mongoose-lean-getters/issues/1

关于node.js - `mongoose-lean-getters` 无法与 `find` 正常工作,调用 getter 方法两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58973452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com