mongoose virtual在jade-lang中不起作用

时间:2012-04-21 17:44:36

标签: node.js mongoose pug

我定义了:

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
});

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

img(src!= person.avatarUrl)

这不会给我的期望。

有没有办法在玉器中制作猫鼬虚拟作品?

修改

我认为这个问题与玉无关, 因为我保存了#34;#34;会话中的对象,在我将其保存到会话之前,所有内容都在"虚拟"工作得很好,但是当我再次从会议中得到它时,它不起作用 可能是关于会话机制的事情。

1 个答案:

答案 0 :(得分:2)

不确定你正在使用什么'会话机制',但是如果它是connect-redis之类的东西,那么在存储之前调用它JSON.stringify(req.session)。这将mongoose文档转换为静态javascript对象,没有getter / setter / virtuals或其他动态能力。如果您希望将会话中存储的虚拟的当前值也作为静态值,则可能需要调用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!
相关问题