æ°æ©èœvirtual async
ãplzãµããŒãïŒ
const User = new Schema(
{
username: {
type: String,
index: true,
unique: true
},
encryptedPassword: {
type: String,
required: true,
minlength: 64,
maxlength: 64
},
passwordSalt: {
type: String,
required: true,
minlength: 32,
maxlength: 32
}
})
User.virtual('password').set(async function generate(v) {
this.passwordSalt = await encryptor.salt()
this.encryptedPassword = await encryptor.hash(v, this.passwordSalt)
})
const admin = new User({
username: 'admin',
password: 'admin'
})
admin.save()
çŸåšãç§ã¯æ±ãæ¹æ³ã䜿çšããŠããŸãïŒ
User.virtual('password').set(function(v) {
this.encryptedPassword = v
})
User.pre('validate', function preValidate(next) {
return this.encryptPassword().then(next)
})
User.method('encryptPassword', async function encryptPassword() {
this.passwordSalt = await encryptor.salt()
this.encryptedPassword = await encryptor.hash(
this.encryptedPassword,
this.passwordSalt
)
})
+1
+1
ã³ãŒãã«éåžžã«åªããã¢ã€ãã¢ãããã€ããããŸãããã®åé¡ã¯äœåºŠãèŠãããŸãããã調æ»ããæéãããŸããããŸããã§ããã ç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ããã次ã®ãªãªãŒã¹ãæ€èšããŸã
åé¡ã¯..䜿çšæ§æã¯ã©ã®ããã«èŠãããã§ãã
await (user.password = 'some-secure-password');
ããã¯æ©èœããŸããã
ECMA262 12.15.4ã«ãããšã user.password = 'some-secure-password'
ã®æ»ãå€ã¯_rval_ã§ããå¿
èŠããããŸãããã®å Žåã 'some-secure-password'
ã§ãã
ããªãã¯ã®æ»ãå€æã€ããšãææ¡ãããŠããsomeVar = object
å¯èœPromise
ããšã«ãããšããã®ã¹ã¬ãããããã³äžèšã®ãªã³ã¯ES262ã®ä»æ§ãããã¯ãESã»ãã³ãã£ã¯ã¹ã®æ·±ãéåãã
ããã«ã䟿å©ãªé¢æ°ãæã€ãšããåãªãç®çã®ããã«ãã®ãããªã»ãã³ãã£ãã¯éåã®åé¡ãå®è£ ããããšããããšã¯ãç¹ã«ãã³ã°ãŒã¹ã³ãŒãããŒã¹å šäœã«ãšã£ãŠããããçš®é¡ã®æªãããšãæå³ããå¯èœæ§ããããããããªãæªãèãã§ãã
ã©ãããŠããªãã¯ãã ãããªãã®ã§ããïŒ
const hashPassword = require('./lib/hashPassword');
const password = await hashPassword('some-secure-password');
User.password = password; // This is completely normal.
ãã®ãããªåçŽãªã¯ã³ã©ã€ããŒã®å Žåãæåéãasync
ã»ãã¿ãŒãäœæããå¿
èŠã¯ãããŸãããããã¯æåããè¡ãã¹ãã§ã¯ãããŸããã
ãããè¡ãããšãã§ããŸãïŒ
User.methods.setPassword = async function (password) {
const hashedPassword = await hashPassword(password);
this.password = hashedPassword;
await this.save();
return this;
};
const myUser = new User();
await myUser.setPassword('mypassword...');
ãªãä»®æ³åãããã¯ã®äºåä¿åãªã©ãè¡ãã®ã«èŠåŽããã®ãããããŸãã...
@heisianã«åæããŸãã ããã¯ç§ã«ãšã£ãŠæ©èœ/ APIã®è¥å€§åã®ããã«æããŸãã ããã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã¡ãœããã䜿çšãã代ããã®æ¹æ³ãã©ã®ããã«äžäŸ¿ã§ãããããããŸããã ããããããã«ããªãäž»èŠãªæ§æãµããŒããè¿œå ããããšã¯ãééããªãè¥å€§åããããã«æããŸãã
ãã®ãããªéåžžã«åçŽãªæ©èœãå¿ èŠã§ãã
User.virtual('password').set((value, done) => {
encryptValueWithAsyncFunction
.then(response => done(null, value))
.catch(reason => done(reason))
;
})
@gcanuããªãã¯ç§ãæçš¿ãããã®ãå®å šã«ç¡èŠããŠããŸããããªããææ¡ããŠãããã®ã¯ä»£å ¥åŒã³åºãããPromiseãè¿ããããã¯Javascript / ECMA262ä»æ§ãå®å šã«ç ŽããŸãã ã³ãŒãã¹ãããããæ©èœããã«ã¯ãã»ãã¿ãŒé¢æ°ãPromiseã§ããå¿ èŠããããŸããããã¯ãå®çŸ©äžãä»æ§ããšã«èš±å¯ãããŠãããããšã«ããæ©èœããŸããã
ãã è¡ãããšã®äœãåé¡ã«ãªã£ãŠããŸããïŒ
await User.setPassword('password');
???
ããªããåã«èŠãããšããªãå Žåãããã¯æ©èœããŸããïŒ
await (User.password = 'password');
@ vkarpov15ããã¯ãã³ã°ãŒã¹åºæã®åé¡ã§ã¯ãªããçŸåšã®ECMAScriptä»æ§ã®æå¹æ§ã«çåãæããããŠããŸãã ãã®ãæ©èœãªã¯ãšã¹ããã¯éããå¿ èŠããããŸã...
以äžã®ã³ãŒãã¯éåžžã«æªãèãã§ãïŒ èšå®ããããã¹ã¯ãŒãã«save
æäœãå«ãŸããã®ã¯ãªãã§ããïŒ
User.methods.setPassword = async function (password) {
const hashedPassword = await hashPassword(password);
this.password = hashedPassword;
await this.save();
return this;
};
const myUser = new User();
await myUser.setPassword('mypassword...');
ãã³ã°ãŒã¹ã¯ããçŸä»£çã§ãããšã¬ã¬ã³ããªãã®ãå¿ èŠãšããŠããŸãã
@heisianããããŸãããç§ã®ééããç§ã¯ã»ãã¿ãŒã®äœ¿çšã®äžè©±ãããŸããã§ãã...
@heisian Plzã¯ã httpsïŒ //github.com/Automattic/mongoose/blob/master/lib/virtualtype.jsãåç §ããŠ
çŸåšãMongoose IMPLã§ã¯ã getter
ãŸãã¯setter
ã¯é¢æ°ãç»é²ããŠããåŒã³åºãã ãã§ã httpsïŒ //tc39.github.io/ecma262/#sec-assignment-operators-runtime-semanticsã§ã¯ãããŸããhttps://github.com/tc39/ecmascript-asyncawait/issues/82ã ããã¯éããŸãã
ãããã£ãŠãplzã¯ãã®ãªã¯ãšã¹ããéããŸãã
@fundon ããããæããŠãã ããïŒä»®æ³ã»ãã¿ãŒãã©ã®çšåºŠæ£ç¢ºã«åŒã³åºããŸããïŒ äœ¿ãæ¹ãæããŠãã ããã async
ã䜿çšããŠããå Žåã¯ãpromiseã§åŠçããå¿
èŠããããŸãã å
ã®äŸã§ã¯ãã»ãã¿ãŒ/代å
¥åŒã³åºãã®ã©ãã«ãawait
ã¯è¡šç€ºãããŠããŸããã
ç§ã®ãµã³ãã«ã³ãŒãã¯åãªãäŸã§ã...ãããç°¡åã«è¡ãããšãã§ããŸãïŒ
User.methods.setPassword = async function (password) {
const hashedPassword = await hashPassword(password);
this.password = hashedPassword;
return this;
};
const myUser = new User();
await myUser.setPassword('mypassword...');
await myUser.save();
æããã«..
ããªãã®äŸã¯ç§ã«ãšã£ãŠè¯ãæ¹æ³ã§ã¯ãããŸããã
ç§ã欲ãã
await new User({ password }).save()
ããã·ã³ãã«ã§ãšã¬ã¬ã³ããªã¢ãŒãã§ãã¹ã¯ãŒããããã·ã¥ããŸãã
ã©ãããŠïŒ æ°è¡ã®ã³ãŒããç¯çŽã§ããŸããïŒ ãã®çç±ã¯ããã¹ãŠã®äœåãªäœæ¥ãæ£åœåããã³ãŒãããŒã¹ãžã®å€æŽãå£ãå¯èœæ§ãããããšãæ£åœåããã®ã«ååã§ã¯ãããŸããã
ãŸããã©ã®ããã«è¡šçŸããŠããMongooseã®å éšã§è¡ãããŠããã®ã¯ã»ãã¿ãŒã§ãããéåæ/åŸ æ©ããããšã¯ã§ããŸããã
@heisianã«åæããŸããã ãã³ã°ãŒã¹ã«ã¯å€ããã®ãå€ãããŸãã ãã³ã°ãŒã¹ã¯ãªãã¡ã¯ã¿ãªã³ã°ãå¿
èŠã§ãïŒ
ãã³ã°ãŒã¹ã«ã¯çŸä»£æ§ãå¿
èŠã§ãã
ãã®åé¡ã解決ãããå Žåã ãã³ã°ãŒã¹ããã©ãŒã¯ãããªãã¡ã¯ã¿ãªã³ã°ããŸãïŒ ãããªãïŒ
çŽ æŽãããïŒ ããããªãŒãã³ãœãŒã¹ã®ãã€ã³ãã§ãã ã©ãããããªãã³ã°ãããããŒãžã§ã³ã§ãã©ãŒã¯ãäœæããŠãã ãããããã¯ç§ãã¡å šå¡ã«ãšã£ãŠè¯ãããšã§ãã
await (User.password = 'password');
ãå¿
èŠã«ãªãå¿é
ã¯ãŸã£ãããããŸããã å¯äžã®æ¬åœã®æ¬ ç¹ã¯ã user.password = 'password';
ã¯ãäœããã®éåææäœãçºçããŠããããšãæå³ããããã user.passwordSalt
ãèšå®ãããªãããšã§ãã ãããããã¯ã«ã©ã®ããã«é¢é£ããããèå³æ·±ã質åã§ãã pre('validate')
ãŸãã¯pre('save')
ããã¯ãããå Žåã user.password
éåææäœãå®äºãããŸã§åŸ
ã€å¿
èŠããããŸããïŒ
ç§ã¯ãã®åé¡ãæã«è² ããªãã§åŽäžããã€ããã¯ãããŸããã .save()
ã .find()
ãªã©ã®èåŸã«ããéåæåäœãçµ±åããããšã«ã¯å€ãã®äŸ¡å€ããããŸããAPIã®ä»ã®éšåãšããŸãé©åããããšã確èªããå¿
èŠããããŸãã
ä»æ¥ãéåæã²ãã¿ãŒãšã»ãã¿ãŒã¯ç§ã«ãšã£ãŠéåžžã«éèŠã§ãã ç¬èªã®æå·åæ¹æ³ã§ãã£ãŒã«ãã埩å·å/æå·åããããã«ãã²ãã¿ãŒãšã»ãã¿ãŒããHTTPãªã¯ãšã¹ããéä¿¡ããå¿ èŠããããŸãããçŸåšããããè¡ãæ¹æ³ã¯ãããŸããã ããªãã¯ãããéæããæ¹æ³ã«ã€ããŠã®èããæã£ãŠããŸããïŒ
@gcanuç§ã¯ããããã¡ãœãããšããŠå®è£ ããã ãã§ã
åè¿°ã®çç±ãšãå¿
èŠãªéåææäœãç°¡åã«åŠçããæ¹æ³ããããšããäºå®ã®ããã«ã async
åäœãçµ±åããèåŸã«ãããŠãŒãã£ãªãã£ã¯èŠåœãããŸãããç¹°ãè¿ããŸããã await (User.password = 'password')
ã¯ECMAScriptã®èŠåã«éåããŸãããããå°é£ã«ãªããåªé
ã«å®è£
ãã䟡å€ããªãããšãä¿èšŒããŸã...
ããã§ãããã®ãã¿ãŒã³ã¯ç§ãã¡ãå®è£ ãããã®ã§ã¯ãããŸããã ä¿åããåã«éåæä»®æ³ã解決ããã®ãåŸ ã€ãšããèãã¯èå³æ·±ããã®ã§ãã
toJSON({virtuals: true})
å®è£
ã«æ°ã«å
¥ã£ãŠããŸãã dbã«å¯ŸããŠä»ã®ã¯ãšãªãå®è¡ããããšã«ãã£ãŠååŸããä»®æ³ãã£ãŒã«ãã®äžéšãããã¯ãã·ãªã¢ã«åããåŸã§ã®ã¿å®è¡ããããã®ã§ãã
@gabzimã¯ãJSON.stringifyã
ãããããçã«ããªã£ãŠãããããããšã@ vkarpov15
get
ã³ãŒã«ããã¯å
ã§ã¯ãšãªãäœæããããšããå§ãããŸããïŒ
ããã¯å Žåã«ãã£ãŠã¯åœ¹ç«ã€ãšæããŸãã
Github URLãã¹ã®ããã«ãããã¥ã¡ã³ãããã¹ãã§ããWebããŒãžïŒãŸãã¯ããã¥ã¡ã³ãïŒã®ãã«ãã¹ãååŸããããšããŸãã
const Doc = require('./Doc.js');
//...
subDocSchema.virtual('fullpath').get(async function(){
const doc = await Doc.findById(this.doc); //doc is a Doc ref of type _id
return `/${ doc.path }/${ this.path }`
})
ããã§ã¯ãã¯ãšãªæäœãéåæã§ãããããasync / awaitã䜿çšããå¿ èŠããããŸãã
ãã®å Žåã @ JulianSotoã¯ãä»®æ³ã§ã¯ãªãã¡ãœããã䜿çšããããšããå§ãããŸãã ä»®æ³ã䜿çšããäž»ãªçç±toJSON()
ãštoObject()
ã¯åæããŠãããããéåæä»®æ³ãåŠçããŸããã
ç§ãããã®ãŠãŒã¹ã±ãŒã¹ã«ééããŸãããç§ã¯è¯ã解決çãèããã¢ã€ãã¢ã«å¯ŸããŠéåžžã«ãªãŒãã³ã§ãããã»ãã¿ãŒã®ã»ãã³ãã£ã¯ã¹ãå£ããªãããšã«åæããããšããŠããŸãã
JSONãããã»ããããã³ã°ãŒã¹ã¢ãã«ã«èªåçã«é©çšãããŠãŒãã£ãªãã£ãäœæããŸããã ãã£ãŒããã¹ã䜿çšããèªåå ¥åããµããŒãããŸãïŒ https ïŒ
ã¢ã€ãã¢ã¯ãããã€ãã®ã«ãŒã«ãšçµã¿åããããšã https ïŒ
ç§ã®èšç»ã§ã¯ãåçŽãªå²ãåœãŠãæ©èœããªãå Žåã¯ãä»®æ³ã䜿çšããããšã§ãã ããããé©çšããããšãä»®æ³ã¯å¿ èŠãªãã®ããã¹ãŠååŸããŸããããã«ãããã€ã³ã¿ãŒãã§ã€ã¹ãªããžã§ã¯ããå®éã®ãã³ã°ãŒã¹ã¢ãã«/ããŒã¿ããŒã¹ãªããžã§ã¯ããšã¯ç°ãªããã®ã«ããããšãã§ããŸãã
ããšãã°ããpayment_methodsãã§ãaddãæäœããµããŒãããUserãªããžã§ã¯ãããããŸãã æ¯æãæ¹æ³ã®è¿œå ã¯ãé åãžã®çŽæ¥ã®è¿œå ã§ã¯ãããŸãããæ¯æãããŒã¯ã³ã䜿çšããããã»ããµãžã®åŒã³åºããæ¯æãæ¹æ³ããŒã¯ã³ã®ååŸãã¢ãã«ãžã®å¥ã®æ¹æ³ã§ã®ä¿åãªã©ã§ãã
ããããã€ã³ã¿ãŒãã§ãŒã¹ã¢ãã«ã§ããæŠå¿µã¢ãã«ã«JSONããããaddãopã§ããããé©çšã§ããããã«ããããšæããŸãã
éåæã»ãã¿ãŒããªããšãããã¯æ©èœããŸããã ããè¯ãã¢ã€ãã¢ããªãéããå¯äžã®ãªãã·ã§ã³ã¯ãmongoose-json-patchã«ãã¹ãopsãããã³mongooseã¡ãœããéã®ããçš®ã®ãããã³ã°ããªãã·ã§ã³ãšããŠåãå ¥ããããšã ãšæããŸããïŒ
@claytongulickãªããéåææäœã§await
ã§ã¯ãªãéåæã»ãã¿ãŒãå¿
èŠã§ãåæçã«èšå®ããå¿
èŠãããã®ã§ããïŒ
@ vkarpov15åã«toObject()
ãštoJSON()
éåæã«ããŠã toObjectSync()
ãštoJSONSync()
é¢æ°ãå°å
¥ããã®ã¯ã©ãã§ããïŒ Sync
ããªã¢ã³ãã¯ãåã«async
ä»®æ³ãã¹ãããããå¿
èŠããããŸãã ïŒãã®ãã¿ãŒã³ã¯ã©ããã®ãã³ã°ãŒã¹ã§äœ¿çšãããŠããããšãèŠããŠããã®ã§ãããã»ã©å¥åŠãªããšã§ã¯ãããŸãããïŒ
ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯æ¬¡ã®ãããªãã®ã§ããå¥ã®ã¢ãã«ã§find()
ãå®è¡ããä»®æ³ãæã€ã¹ããŒãããããŸãïŒåã«IDãå
¥åãããããå°ãè€éã§ãïŒã ãã¡ãããä¿å/åé€ããã¯ã䜿çšããŠã¡ã€ã³ã¢ãã«ã«å¿
èŠãªãã®ãéæ£èŠåããããšã¯ã§ããŸãããããã«ã¯å€ãã®ä¿å®ã³ã¹ãã䌎ããŸãïŒãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãããã©ãŒãã³ã¹äžã®å©ç¹ã¯æ¬åœã«å¿
èŠãããŸããïŒã ã§ããããç§ã®ããã«ãããè¡ãããã®ä»®æ³ãæã£ãŠããã®ã¯èªç¶ãªããšã§ãã
JSON.stringify()
ã¯éåætoJSON()
ãµããŒãããŠããªããããæ®å¿µãªããtoJSONSync()
ã¢ã€ãã¢ã¯æ©èœããŸããã
find()
ã¯ããªãè€éã ãšãã£ããã£ãŠããŸãããã念ã®ããã
ãŸããéåæä»®æ³ã«ã¯ã»ãã¿ãŒããããŸããããããšãã²ãã¿ãŒ
ãã®åé¡ãæ±ããŠãã人ã®ããã®è§£æ±ºçïŒ
ã»ãã¿ãŒã ããéåæã®å Žåãç§ã¯è§£æ±ºçãèŠã€ããŸããã å°ãæ±ããŠããŸãããåé¡ãªãåäœããŠããããã§ãã
ã¢ã€ãã¢ã¯ãã³ãŒã«ããã¯ãããããšããŠpromiseãªãŸã«ããŒãå«ããªããžã§ã¯ããšèšå®ããä»®æ³ããããã£ãä»®æ³ã»ãã¿ãŒã«æž¡ãããšã§ãã ã»ãã¿ãŒãå®äºãããšãã³ãŒã«ããã¯ãåŒã³åºãããŸããããã¯ããªããžã§ã¯ããä¿åã§ããããšãå€éšã«æå³ããŸãã
æåã®è³ªåããçæ³ãåŸãåºæ¬çãªäŸã䜿çšããã«ã¯ïŒ
const User = new Schema(
{
username: {
type: String,
index: true,
unique: true
},
encryptedPassword: {
type: String,
required: true,
minlength: 64,
maxlength: 64
}
})
User.virtual('password').set(function generate(inputWithCb, virtual, doc) {
let cb = inputWithCb.cb;
let password = inputWithCb.password;
encryptor.hash(password)
.then((hash) => {
doc.set("encryptedPassword", hash);
cb && cb();
});
})
// create the document
const admin = new User({
username: 'admin'
});
// setup the promise for setting the async virtuals
const pwdProm = new Promise((resolve) => {
admin.set("password", {cb: resolve, password: "admin"});
})
//run the promise and save only when the virtual setters have finished executing
pwdProm
.then(() => {
admin.save();
});
ããã¯æãŸãããªãçµæãããããå¯èœæ§ããããããèªå·±è²¬ä»»ã§äœ¿çšããŠãã ããã
@siltopromiseãè¿ãã¹ããŒãã¡ãœããã䜿çšããŠã¿ãŸãããïŒ
@ vkarpov15éåžžã¯ãããè¡ããŸããããããè¡ã£ããããžã§ã¯ãã§ã¯ãjsonããã©ã³ãããèªåçã«çæãããã¹ããŒããä»®æ³ãgraphQLãšã³ããã€ã³ãããããããç¹å®ã®å Žåã®ã¡ãœããã§ã¯ãªããçµ±äžãããä»®æ³ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããããšããå§ãããŸãã
@siltoã³ãŒããµã³ãã«ãæäŸã§ããŸããïŒ ãããã©ã®ããã«èŠãããèŠãŠã¿ããã§ã
ã»ãã¿ãŒã®å Žåã¯ãä¿åããããããã¥ã¡ã³ãããŒã¿ãæ¢ãã ãã§ããå ŽåããããŸããä¿åããå Žåã¯ãpromiseã§ãããããpromiseã§ãããã£ãŒã«ãã確èªãã解決ããŠããä¿åã§ããŸãã
ããŒã¿ãæ€çŽ¢ããå Žåã¯ããã®ã¢ãã«ãPromiseã¿ã€ãã«ãªãããšãã¹ããŒããªãã·ã§ã³ã§å®çŸ©ããããã¢ãã«ãäœæãããšãã«ã¹ããŒãããã§ãã¯ããpromiseã§ããã»ãã¿ãŒãã²ãã¿ãŒããŸãã¯ä»®æ³ããããã©ããããã§ãã¯ããŠãããã¿ãŒã³ããŸãããããçŽæã«ã
ãŸãã¯ããã§ã«æã£ãŠããexecã®ãããªé¢æ°ïŒexecPopulateïŒã䜿çšããããšãã§ããŸãã
å±¥æŽæžã§ã¯ãã»ãã¿ãŒãã²ãã¿ãŒããŸãã¯ä»®æ³ãæã€ããŒã¿ã芳å¯ãããå Žåã¯ããã®åé¡ã«å¯Ÿå¿ããé¢æ°ãäœæã§ããŸããããŒã¿ãä¿åãããå Žåã¯ãåãé¢æ°ã䜿çšããŠããŒã¿ãå€æã§ããããšã¯ãã§ã«çŽæãããŠããŸããä¿åããåã«ã
以åã¯promiseã§ä»®æ³ã䜿çšããŠããŸããããexpress-promiseã䜿çšããŠãããããã»ãšãã©ã®å Žåãpromiseã¯æ°ã«ããŸããããå Žåã«ãã£ãŠã¯Docã䜿çšããŸãã
ãããã«ããããã¹ãŠã®ããŒã¿ããã§ã«è§£æ±ºããçŽæãããã»ãã¿ãŒãå®çŸ©ããåŸã®ãã¹ãŠã®çŽæãããä»®æ³ããã³ã²ãã¿ãŒã§ãthenãã䜿çšããå¿ èŠããªããããçš®ã®ã©ãããŒããããšäŸ¿å©ã§ãã
ç§ã¯ããªãããã®ã¢ãããŒãã§ããªããå©ããããšãã§ããããšãæã¿ãŸãã
ãããããé¡ãããŸãã
PSïŒçŽæãããä»®æ³ã®äœ¿çšã®å žåçãªäŸãç§ã®å Žåã2ã€ã®ãã¹ã䜿çšããŠãããã¥ã¡ã³ããåé€ã§ãããã©ããããŸãã¯å€éšããŒã¿ã«åŸã£ãŠæŽæ°ã§ãããã©ããã確èªããŸãããããã£ãŠãéåžžãä»ã®ã¢ãã«ã«ã¯ãšãªãå®è¡ããŠããã®ã¢ãã«ãåé€ãŸãã¯å€æŽã§ãããã©ããã確èªããå¿ èŠããããŸãã ã åã«ãèšã£ãããã«ãexpress-promiseã¯ãã®åé¡ã解決ããŸããããããã®ã¿ã¹ã¯ãå®è¡ã§ãããã©ãããå éšã§ç¢ºèªãããå Žåã¯ã以åã«ãã®promiseã解決ããå¿ èŠããããŸããã
@chumagerããã€ãã®ã³ãŒããµã³ãã«ãæäŸããŠããã ããŸããïŒ
ããã«ã¡ã¯ãããšãã°ã以äžã®ç§ã®ã³ã¡ã³ãã«ãããšãç§ã¯2ã€ã®ä»®æ³_updateãš_deleteãšãã¹ããŒãã§å®çŸ©ãããŠããªãå Žåã«ãããã®ä»®æ³ãå®çŸ©ãããã©ã°ã€ã³ã䜿çšããŠãtrueãè¿ããŸãã
ã¯ã¬ãžãããå®çŸ©ããããã®ã·ãã¥ã¬ãŒã·ã§ã³ã¢ãã«ãšãmktããŒã¿ã䜿çšããŠã·ãã¥ã¬ãŒã·ã§ã³ãå
¬éããããã®ãããžã§ã¯ãã¢ãŒãããããŸãã
ã·ãã¥ã¬ãŒã·ã§ã³ã«é¢é£ä»ããããŠãããããžã§ã¯ããããå Žåãã·ãã¥ã¬ãŒã·ã§ã³ãåé€ããããšã¯ã§ããŸããããŸãããããžã§ã¯ããæè³çšã«å
¬éãããŠããå Žåãã·ãã¥ã¬ãŒã·ã§ã³ãæŽæ°ããããšã¯ã§ããŸããã
ã·ãã¥ã¬ãŒã·ã§ã³ã§ã®virtual_updateã®è§£æ±ºã¯ãã·ãã¥ã¬ãŒã·ã§ã³ãåç §ãããã¹ããŒã¿ã¹ããEn Financiamientoãã®ãããžã§ã¯ããæ€çŽ¢ããããšã§ãããã®ã¯ãšãªãtrueã®å Žåãã·ãã¥ã¬ãŒã·ã§ã³ã¯æŽæ°ã§ããŸãã...æããã«ãfindãã¯çŽæããã®ã§ãä»®æ³ããã...
éåžžãããã³ããšã³ãã§ãã®ä»®æ³ã䜿çšããã®ã§ãããŒã¿ã¯ãªããžã§ã¯ãã解決ããã¢ãžã¥ãŒã«ã«ãã£ãŠè§£æãããŸãïŒcoãŸãã¯express-promiseã¯ãçµæã®1ã€ãŸãã¯é åã«äŸåããŸãïŒã
ããã¥ã¡ã³ããèŠããå Žåã¯ãä»®æ³ãpromiseã§ããããšããããã®ã§ãcoã¢ãžã¥ãŒã«ã䜿çšããŠè§£æ±ºããå¿ èŠããããŸããããã§ã«resultãpromiseãšããŠäœ¿çšããå¿ èŠããããŸãã...ããããçµæã«coãè¿œå ããã ãã§ãéæ³ããããããæ€çŽ¢åŸã«coã䜿çšãããã©ã°ã€ã³ã䜿çšããŸã...ããããããèªç¶ã«ãçµæã»ããã¯ãã§ã«ä»äºãããŠããããã§ãã
ç§ã¯ãã³ã°ãŒã¹ããããŒã¿ãååŸããããã«å€ãã®ãšã³ããã€ã³ãã䜿çšããŸãããã®é¢æ°ãã©ãã§ã䜿çšããããæ€çŽ¢ã«ãã¹ãããã¯ã䜿çšããå¿ èŠããããŸãã
ã²ãã¿ãŒã§ãåãããšã§ãããã»ãã¿ãŒã§ã¯ããã¯ãäºåæ€èšŒããå¿ èŠããããŸããã埪ç°åç §ãã³ã³ã¹ãã©ã¯ã¿ãŒãªã©ã®ä»ã®å°éå ·ããããããããã¥ã¡ã³ãã®ä»ã®å°éå ·ã«è§ŠããªãããšãéèŠã§ãã
ãããã...
PSïŒæ¬åœã«ãµã³ãã«ã³ãŒããå¿ èŠãªå Žåã¯ãç§ã«ç¥ãããŠãã ããã
@chumageræ£æã®å€§ããªå£ïŒ==ã³ãŒããµã³ãã«ã ç§ã¯æ¬åœã«ã³ãŒããµã³ãã«ã奜ã¿ãŸãã
æãåèã«ãªãã³ã¡ã³ã
ã³ãŒãã«éåžžã«åªããã¢ã€ãã¢ãããã€ããããŸãããã®åé¡ã¯äœåºŠãèŠãããŸãããã調æ»ããæéãããŸããããŸããã§ããã ç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ããã次ã®ãªãªãŒã¹ãæ€èšããŸã