0

我定义:

var PersonSchema = new Schema({
    avatar: Number
});
PersonSchema.virtual("avatarUrl").get(function() {
    return "http://example.com/avatar/" + this.avatar;
});

这适用于节点的代码,例如:

PersonModel.findOne(function(err, person) {
    console.log(person.avatarUrl); // http://example.com/avatar/1
});

但在玉模板中,如果我使用:

img(src!= person.avatarUrl)

这不会给我的期望。

有没有什么方法可以在玉中制作猫鼬虚拟作品?

编辑

我认为问题与翡翠无关,
因为我将“人”对象保存在会话中,在将其保存到会话之前,“虚拟”上的所有内容都可以正常工作,但是当我再次从会话中获取它时就不行了。
可能与会话机制有关。

4

1 回答 1

2

不确定您使用的是什么“会话机制”,但如果它类似于connect-redisJSON.stringify(req.session) ,那么它会在存储之前调用。这会将 mongoose 文档转换为没有 getter/setter/virtuals 或其他动态能力的静态 javascript 对象。如果您希望虚拟对象的当前值也存储在会话中作为静态值,您可能需要调用req.session.person = doc.toJSON({ virtuals: true }).

另一种选择是在会话返回后将会话人员具体化为 MongooseDocument。

// assume the session has been retrieved already
var person = new Person;
person.init(req.session.person);
req.session.person = person;
console.log(req.session.person.someVirtual); // yay!
于 2012-04-26T22:55:54.113 回答