κ°μ²΄κ° ν¬μ€νΈ μ μ₯ λ―Έλ€μ¨μ΄μμ μλ‘μ΄ κ²μΈμ§ μλ κ²μ΄ μ¬μ ν μ€μν©λλ€. μ λ κ·Έκ²μ΄ falseλ‘ μ€μ λμ΄ μλ€κ³ λ―Ώμ΅λλ€. ν¬μ€νΈ μ μ₯ νμ falseλ‘ μ€μ λμ΄μΌ ν©λλ€.
schema.pre('save', function (next) {
this.wasNew = this.isNew;
next();
})
schema.post('save', function () {
if (this.wasNew) {
// ...
}
})
μ΄λ‘ μΈν΄ wasNew μμ±μ΄ μ μ§λ©λκΉ?
μ€ν€λ§μ μΆκ°νμ§ μλ ν
μλ ,
λ΄κ° κ°μ§κ³ μλ μ½λμμ μ΄κ²μ μ¬μ©νλ €κ³ νλλ° μ΄κ²μ΄ μλνμ§ μλ μ΄μ λ₯Ό λͺ¨λ₯΄κ² μ΅λλ€. μ¬μ μ μ₯μμ wasNewκ° μμ±λκ³ trueμ λλ€. κ·Έλ¬λ μ¬ν μ μ₯μμλ μ΄ νλκ·Έκ° μ μλμ§ μμ΅λλ€(κ·Έλμ μ μλμ§ μμμ μ»μ΅λλ€).
λ΄κ° μλͺ»νκ³ μλ κ²μ΄ μμ΅λκΉ? _this_μ λ²μκ° λ ν¨μ κ°μ μ μ§(λλ λ°μΈλ©)λμ§ μμ κ²κ³Ό κ°μ΅λλ€.
λλ λͺ½κ΅¬μ€ λ²μ μ μλνλλ°, νλλ npm('3.9.8-pre')μμ μ€μΉνκ³ λ€λ₯Έ νλλ μ΄ λ¦¬ν¬μ§ν 리μμ λΉλνμ΅λλ€... λκ΅°κ° μ μ μ¬νμ΄ μμ΅λκΉ?
λ΄ μ€ν€λ§κ° _wasNew_ νλλ₯Ό ν¬ν¨ν νμκ° μλ€λ κ²μ μ΄ν΄νμ΅λλ€. λ§μ΅λκΉ?
미리 κ°μ¬λ립λλ€!
μνΈ:
module.exports = function (schema) {
log.info("Inside functions");
schema.pre('save', function (next) {
log.info('pre saving...');
this.wasNew = this.isNew;
var self = this;
if (self.isNew) {
self.information.token = require('crypto').randomBytes(48).toString('hex');
self.profile.name = (self.email.split("@"))[0];
}
next();
});
schema.post('save', function (doc) {
log.info('post saving...', this);
if (this.wasNew) {
log.info("Sending email");
mailingService.welcome(this.email);
}
var bond = {
"name": doc.profile.name,
"owner": doc._id
};
log.info(bond);
dbHelper.createBond(bond);
});
};
μλ νμΈμ, μ λ _this.wasNew_λ₯Ό _doc.wasNew_λ‘ λ³κ²½νκ³ μ΄μ μ±κ³΅μ μΌλ‘ μλν©λλ€! κ·Έλ¦¬κ³ νλλ νμμ λ°λΌ λ¬Έμμ μ μ₯λμ§ μμ΅λλ€.
μ΄κ²μ μ ννμ§ μμ΅λκΉ?
κ°μ¬ ν΄μ!
λ€ :)
μ¬λ¬λΆ, μ΄ μ‘°μ μ λͺ¨λ μ€ν€λ§μ κΈ°λ³Έκ°μΌλ‘ νμ¬ λΆκΈ°μ μ€μ λ‘ μΆκ°λμ΄μΌ ν©λλ€.
wasNew
κ° λ΄μ₯λμ΄μλ μ λλ μ΄μ κ° μλμ? λͺ½κ΅¬μ€μ λ£μ΄λ³ΌκΉμ?
ν©λ¦¬μ μΈ μμ΄λμ΄, μ΄ν 5.x 릴리μ€μμ κ³ λ €ν κ²μ λλ€.
λͺ¨λλ€ μλ !
μ΄ λ΄μ₯ κΈ°λ₯μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
wasNew
μ΄(κ°) λͺ½κ΅¬μ€ _(5.4.19)_μ μ‘΄μ¬νμ§ μμ΅λλ€. μ λ¬Έμλ₯Ό μ μ₯νλ €κ³ ν λ
@darkterra wasNew
μ΄(κ°) μμ΅λλ€ pre
λ΄λΆμ μμ±ν΄μΌ νλ©° μμ μ£Όμ https://github.com/Automattic/ μμ μΈκΈν λλ‘ post
λ΄λΆμμ μ¬μ©ν μ μμ΅λλ€. λͺ½κ΅¬μ€/issues/1474#issuecomment -17669982
@thakurinbox , κ·νμ μλ΅μ κ°μ¬λ립λλ€.
λ΄κ° μλ κ²μλ¬Όμ μ§λ¬Έμ "postSave hook_μμ isNew λ₯Ό 보쑴"νλ κ²μ΄λΌκ³ μ¬λ°λ₯΄κ² μ΄ν΄νλ€λ©΄ @emanuelecasadio , @lbstr λ° @vkarpov15 λ "postSave"μ μ΄ λ°μ΄ν°λ₯Ό λ΄μ₯νλ κ²μ΄ μ’μ κ²μ΄λΌκ³ λ§νλ κ² κ°μ΅λλ€. 'isNew' λλ 'wasNew' μμ±μΈμ§ μ¬λΆ) _.
'isNew'λ 'wasNew'κ° μμ΄μ 'isNew' μμ±μ΄ λ μ΄μ μ‘΄μ¬νμ§ μκ³ λ―Έλμ 'wasNew'λ‘ λ체λ κ²μΈμ§ κΆκΈν©λλ€.
_μ½λμ μ½κ°μ νν:_
'use strict';
const mongoose = require('mongoose'); // v5.4.19
const connect = mongoose.connect('mongodb://localhost/test_mongoose', { useNewUrlParser: true });
console.log('mongoose connect: ', connect);
connect.then(connectionObject => {
const Schema = mongoose.Schema;
const BlogPost = new Schema({
title: String,
body: String,
date: Date
});
BlogPost.pre('save', function(next, doc, err) {
console.log('pre: this: ', this);
console.log('pre: doc: ', doc);
next();
});
BlogPost.post('save', function(doc, next) {
console.log('post: this: ', this);
console.log('post: doc: ', doc);
next();
});
const BlogModel = mongoose.model('BlogPost', BlogPost);
const newBlogPost = new BlogModel({
title: 'This is a test',
body: 'This is the BEST POST ever !!!!!',
date: new Date()
});
console.log('newBlogPost: ', newBlogPost);
newBlogPost.save((err, doc) => {
if (err) {
console.error(err);
}
else
{
console.log('callback SAVE: ', doc);
console.log('Post SAVED :)')
}
});
})
_κ·Έλ¦¬κ³ isNew λλ wasNew κ° μμ΅λλ€:_
mongoose connect: Promise { <pending> }
newBlogPost: { _id: 5c90aeb34f000a254ed2b6f7,
title: 'This is a test',
body: 'This is the BEST POST ever !!!!!',
date: 2019-03-19T08:56:19.011Z }
pre: this: { _id: 5c90aeb34f000a254ed2b6f7,
title: 'This is a test',
body: 'This is the BEST POST ever !!!!!',
date: 2019-03-19T08:56:19.011Z }
pre: doc: SaveOptions {}
post: this: { _id: 5c90aeb34f000a254ed2b6f7,
title: 'This is a test',
body: 'This is the BEST POST ever !!!!!',
date: 2019-03-19T08:56:19.011Z,
__v: 0 }
post: doc: { _id: 5c90aeb34f000a254ed2b6f7,
title: 'This is a test',
body: 'This is the BEST POST ever !!!!!',
date: 2019-03-19T08:56:19.011Z,
__v: 0 }
callback SAVE: { _id: 5c90aeb34f000a254ed2b6f7,
title: 'This is a test',
body: 'This is the BEST POST ever !!!!!',
date: 2019-03-19T08:56:19.011Z,
__v: 0 }
Post SAVED :)
μ’μ, λΆλͺ ν μ½μμ κ°μ²΄μ λ€λ₯Έ μμ±κ³Ό μ΄λ¬ν λ©μλλ₯Ό νμν μ μλ κ² κ°μ§λ§ preSaveμμ "this.isNew" λ° "this.isModified()"λ₯Ό νΈμΆνλ €κ³ νλ©΄ λ€μκ³Ό κ°μ νλͺ©μ΄ μμ΅λλ€. μ½μμ λνλ©λλ€ ...
BlogPost.pre('save', function(next, doc, err) {
console.log('pre: this: ', this);
console.log('pre: doc: ', doc);
console.log('pre: this.isNew: ', this.isNew); // true
console.log('pre: this.isModified(): ', this.isModified()); // true
this.wasNew = this.isNew;
console.log('pre: this.wasNew: ', this.wasNew); // true
next();
});
λ°λΌμ μ΄ λ¬Έμ μ νΈλ¦μ΄ μ μλν¨μ νμΈνμ΅λλ€. λ°λ©΄μ κ³Όκ±°μλ μ½μμ΄ Mongooseμ μν΄ μ μλ κ°μ²΄μ κΈ°λ₯ λ° κΈ°ν μμ±μ μ΄κ³Όνμ¬ νμν μ μλ€κ³ νμ ν©λλ€.
μμ§ μ΄ κΈ°λ₯μ λν μ λ°μ΄νΈκ° μμΌλ―λ‘ μ΄ λ¬Έμ κ° μ¬μ ν μ΄λ € μμ΅λλ€ :+1: . μ§κΈμ μ¬μ μ μ₯μμ wasNewλ₯Ό μλμΌλ‘ μ€μ νλ κ²μ΄ μ’μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ