2016-03-04 16 views
6

ok, tôi mới đến mongoose và cố gắng hiểu cách sử dụng các thuộc tính ảo. đây là một mã mẫu mà tôi đã thử nghiệm.Virtuals in mongoose, 'this' là đối tượng trống

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var objSchema = new Schema({ 
    created: {type: Number, default: Date.now()}, 
}); 

objSchema.virtual('hour').get(()=>{ 
    //console.log(this); 
    var d = new Date(this.created); 
    return d.getHours(); 
}); 

var obj = mongoose.model('obj', objSchema); 

var o = new obj(); 
o.toObject({virtuals: true}); 
console.log(o.created); 
console.log(o.hour); 

vì vậy tôi mong đợi các bản ghi là một cái gì đó như:

1457087841956 
2 

nhưng sản lượng là

1457087841956 
NaN 

và khi tôi đăng nhập 'này' ở đầu getter ảo, nó in {}. tôi đang làm gì sai?

Trả lời

18

Vấn đề là arrow function sử dụng trong virtual chức năng, cùng một vấn đề có thể được tìm thấy ở đây ES6 anonymous function and schema methods, lý do là tính năng Lexical this của arrow function

Để giải quyết nó, hãy thay đổi mã của bạn như sau

objSchema.virtual('hour').get(function(){ 
    console.log(this.created); 
    var d = new Date(this.created); 
    return d.getHours(); 
}); 
+2

cảm ơn, không thể hình dung ra bản thân mình trong một triệu năm :) –

Các vấn đề liên quan