【问题标题】:mongoose virtual is not working in jade-langmongoose virtual 在jade-lang 中不起作用
【发布时间】:2012-04-21 17:44:36
【问题描述】:

我定义了:

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)

这不会达到我的预期。

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

编辑

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

【问题讨论】:

  • 您尝试过替代语法吗? #{person.avatarUrl}?
  • 我试过了,还是不行。
  • 您可以与我们分享任何错误消息吗?以及对完整性的渲染调用......
  • 没有错误信息。我确定节点和玉中的“人”对象不为空。

标签: node.js mongoose pug


【解决方案1】:

不确定您使用的是什么“会话机制”,但如果它类似于connect-redis,那么它会在存储之前调用JSON.stringify(req.session)。这会将 mongoose 文档转换为没有 getter/setter/virtual 或其他动态功能的静态 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!

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2016-05-18
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2022-08-20
    相关资源
    最近更新 更多