@vkarpov15 ๋ ์ด ๋๊ธ ์์ ์๋ ์ฝ๋๋ฅผ ์ ์ํ์ต๋๋ค.
schema.post('findOneAndUpdate', (result, next) =>{
if (result.docField == 'invalidValue'){
return next(new mongoose.Error.ValidationError('docField had an invalid value'));
}
// ...
});
๊ทธ๋ฌ๋ ValidationError
์๋ ์ฌ์ฉ์ ์ ์ ๋ฉ์์ง๊ฐ ํฌํจ๋์ด ์์ง ์์ต๋๋ค.
docField์ ์๋ชป๋ ๊ฐ์ด ์์ต๋๋ค.
๋์ ๋ฉ์์ง๋ ๋จ์ํ ๋ฏธ๋ฆฌ ์ค๋น๋ ๋ฉ์์ง์ ๋๋ค
๊ฒ์ฆ์ ์คํจํ์ต๋๋ค
๋ค์์ ๋ฌธ์์ด์ ValidationError์ ๋๋ค.
{
"errors": {},
"_message": "Validation failed",
"message": "Validation failed",
"name": "ValidationError"
}
v 4.13.8 ๋ฐ v 5.0.7 ์์ ํ ์คํธํ์ต๋๋ค.
์๋ ํ์ธ์ @jeremyml์ ๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด @vkarpov15 ๋ ๋น์ ์ด ์ ์ํ ํํฌ์ ๋น๋๊ธฐ ๋ถ๋ถ์ ๋์ด ๊ฒ ๊ฐ์ต๋๋ค. ValidationError์ ๋ํ ์์ค๋ฅผ ์ดํด๋ณธ ํ ๋ชจ๋ธ์ ์ธ์คํด์ค ๋์ ๋ฌธ์์ด์ ์ ๊ณตํ๋ฉด ๋ฉ์์ง๊ฐ 'Validation failed'๋ง ํ์๋ฉ๋๋ค.
function ValidationError(instance) {
this.errors = {};
this._message = '';
if (instance && instance.constructor.name === 'model') {
this._message = instance.constructor.modelName + ' validation failed';
MongooseError.call(this, this._message);
} else {
this._message = 'Validation failed';
MongooseError.call(this, this._message);
}
this.name = 'ValidationError';
if (Error.captureStackTrace) {
Error.captureStackTrace(this);
} else {
this.stack = new Error().stack;
}
if (instance) {
instance.errors = this.errors;
}
}
Error ์ธ์คํด์ค์ ํจ๊ป ์ด ์ ์๋ค๋ฉด ๋ค์์ด ์๋ํฉ๋๋ค.
#!/usr/bin/env node
'use strict'
const mongoose = require('../lib/test_db')
const Schema = mongoose.Schema
const testSchema = Schema({
docField: String
})
testSchema.post('findOneAndUpdate', (result, next) => {
let err = new Error('invalid docfield value')
err.name = 'ValidationError'
if (result.docField === 'invalidValue') {
return next(err)
}
})
const Test = mongoose.model('test', testSchema)
const test = new Test({
docField: 'valid'
})
let savedDoc = test.save()
savedDoc.then(() => {
Test.findOneAndUpdate({
_id: test.id
}, { docField: 'invalidValue' }, { runValidators: true, new: true }, (err, res) => {
if (err) { return console.error(err) }
console.log(res)
})
})
์ฐ์ถ:
InspiredMacPro:Help lineus$ ./mongoose5/6171/index.js
{ ValidationError: invalid docfield value
at Query.testSchema.post (/Users/lineus/dev/Help/mongoose5/6171/index.js:12:25)
at callMiddlewareFunction (/Users/lineus/dev/Help/mongoose5/node_modules/kareem/index.js:399:23)
at next (/Users/lineus/dev/Help/mongoose5/node_modules/kareem/index.js:193:9)
at Kareem.execPost (/Users/lineus/dev/Help/mongoose5/node_modules/kareem/index.js:217:3)
at _cb (/Users/lineus/dev/Help/mongoose5/node_modules/kareem/index.js:289:15)
at _init (/Users/lineus/dev/Help/mongoose5/node_modules/mongoose/lib/query.js:2010:5)
at model.Document.init (/Users/lineus/dev/Help/mongoose5/node_modules/mongoose/lib/document.js:370:5)
at completeOne (/Users/lineus/dev/Help/mongoose5/node_modules/mongoose/lib/query.js:1996:12)
at cb (/Users/lineus/dev/Help/mongoose5/node_modules/mongoose/lib/query.js:2368:14)
at /Users/lineus/dev/Help/mongoose5/node_modules/mongoose/lib/query.js:2454:16
at /Users/lineus/dev/Help/mongoose5/node_modules/mongoose/lib/utils.js:418:16
at session.endSession (/Users/lineus/dev/Help/mongoose5/node_modules/mongodb/lib/utils.js:400:74)
at ClientSession.endSession (/Users/lineus/dev/Help/mongoose5/node_modules/mongodb-core/lib/sessions.js:69:41)
at args.push (/Users/lineus/dev/Help/mongoose5/node_modules/mongodb/lib/utils.js:397:17)
at handleCallback (/Users/lineus/dev/Help/mongoose5/node_modules/mongodb/lib/utils.js:128:55)
at /Users/lineus/dev/Help/mongoose5/node_modules/mongodb/lib/collection.js:2296:12 name: 'ValidationError' }
^C
InspiredMacPro:Help lineus$
@jeremyml ๋ค ๋ง์ด ๋ง์, ๋ด ์๊ฐ ํ๋ ธ์ด
schema.post('findOneAndUpdate', (result, next) =>{
if (result.docField == 'invalidValue'){
var validationError = new mongoose.Error.ValidationError(null);
validationError.addError('docField', new mongoose.Error.ValidatorError({ message: 'Invalid' }));
return next(validationError);
}
// ...
});
ValidationError๋ ValidatorError ์ธ์คํด์ค์ ๋ํ ๊ฒฝ๋ก ๋งคํ์ด๋ฏ๋ก ๋ค์ ์ค ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jeremyml ๋ค ๋ง์ด ๋ง์, ๋ด ์๊ฐ ํ๋ ธ์ด
ValidationError๋ ValidatorError ์ธ์คํด์ค์ ๋ํ ๊ฒฝ๋ก ๋งคํ์ด๋ฏ๋ก ๋ค์ ์ค ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.