2016-05-21 16 views
7

Kullanıcı varlığı için bir Mongoose veritabanı şeması oluşturdum ve geçerli tarihi updated_at alanına eklemek istiyorum. .pre('save', function() {}) geri aramayı kullanmaya çalışıyorum ama her çalıştırdığımda bana this undefined olduğunu bildiren bir hata mesajı alıyorum. Ben de bunun için bir neden olabilir sanırım ES6 kullanmaya karar verdim (her şey çalışıyor olsa da). Benim Gelincik/Düğüm ES6 kod aşağıda:'this' bir Mongoose ön kaydetme kancasında tanımlanmamış

import mongoose from 'mongoose' 

mongoose.connect("mongodb://localhost:27017/database", (err, res) => { 
    if (err) { 
    console.log("ERROR: " + err) 
    } else { 
    console.log("Connected to Mongo successfuly") 
    } 
}) 

const userSchema = new mongoose.Schema({ 
    "email": { type: String, required: true, unique: true, trim: true }, 
    "username": { type: String, required: true, unique: true }, 
    "name": { 
    "first": String, 
    "last": String 
    }, 
    "password": { type: String, required: true }, 
    "created_at": { type: Date, default: Date.now }, 
    "updated_at": Date 
}) 

userSchema.pre("save", (next) => { 
    const currentDate = new Date 
    this.updated_at = currentDate.now 
    next() 
}) 

const user = mongoose.model("users", userSchema) 
export default user 

hata iletisi:

undefined.updated_at = currentDate.now; 
        ^
TypeError: Cannot set property 'updated_at' of undefined 

DÜZENLEME: vbranden cevabı @ kullanılarak ve standart bir işleve bir sözcük işlevinden bunu değiştirerek bu düzeltildi. Ancak, daha sonra, hatayı artık göstermese de, nesnede updated_at alanını güncellemeyen bir sorun yaşadım. this.updated_at = currentDate.now'u this.updated_at = currentDate olarak değiştirerek bunu düzeltdim. fonksiyon bildirimi/ifadeler vs [Ok işlevini:

+0

-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

değişikliği

userSchema.pre("save", (next) => { const currentDate = new Date this.updated_at = currentDate.now next() }) 

sözcük kullanır onlar değiştirilebilir/eşdeğer musunuz? ] (http://stackoverflow.com/q/34361379/218196) –

cevap

28

sorunu ok fonksiyonu bu İlgili

userSchema.pre("save", function (next) { 
    const currentDate = new Date 
    this.updated_at = currentDate.now 
    next() 
}) 
+0

Teşekkürler! Bu artık hata veriyor, ancak 'update_at 'alanını aslında yeni bir kullanıcı (rota dosyasında) oluştururken yönlendiriciden çıkardığım JSON nesnesine eklemiyor. Eğer konsol.log (this.updated_at) 'yaparsam, sadece 'undefined' çıktılar. Bunun neden olabileceğini biliyor musun? –

+0

Yeni Date – vbranden

+0

Thnx yerine yeni bir tarih() deneyin! Bu sadece biraz zaman kurtardı – Deadfish