読者です 読者をやめる 読者になる 読者になる

TypeScript 2.0 mongoose で hook が動かない

環境

Typescript 2.0.6 Mongoose 4.9.4

原因

TypeScript, ES6, Mongoose のどれが良くないのかはわからないけど アロー記法がお気に召さないらしい。

ソースは通っているのに動かない。 以前は mocha テストの this.timeout() も効かなかった。 function(… に直したら想定通りに動くようになった。 アロー記法と function 定義は同じでなかったからそういうことも有り得そうだけど.. エラーも出ないし時間がかかった。

NG

import {Schema} from "mongoose";
export let sampleSchema: Schema = new Schema({
        name: String,
        createdAt: Date,
        deleted: Boolean,
    })
    .pre('save', (next)=> {
        if (!this.createdAt) {
            this.createdAt = new Date();
            this.deleted = false;
        }
        next();
    });

OK

import {Schema} from "mongoose";
export let sampleSchema: Schema = new Schema({
        name: String,
        createdAt: Date,
        deleted: Boolean,
    })
    .pre('save', function (next) {
        if (!this.createdAt) {
            this.createdAt = new Date();
            this.deleted = false;
        }
        next();
    });