์ผ๋ถ objectId๋ฅผ ์ฐธ์กฐ๋ก ์ฝ์ ํ๊ณ ์์ผ๋ฉฐ ์ ํจํ objectid์ธ์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค(์ง๊ธ์ ์ ํจํ ID๊ฐ ์๋ ๋ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค).
find() ํธ์ถ์ ์ํํ์ฌ ์ ํจํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋์ง ํ์ธํ๊ณ ์์ต๋๋ค.
๋ฌธ์์ด์ด ์ฌ๋ฐ๋ฅธ ํ์์ธ์ง ์ด๋ป๊ฒ ํ์ธํด์ผ ํฉ๋๊น? ๋ฌธ์์ด์ด 24์ ๋ฌธ์์ด์ธ์ง ํ์ธํ๋ ์ผ๋ถ ์ ๊ท์์ ๋ณด์์ต๋๋ค. ํดํน์ฒ๋ผ ๋ณด์ ๋๋ค. ObjectId์ ๋ด๋ถ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๊ฐ ์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์๋ค. ์ ๋ง ๊ณ ๋ง์!
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. mongoose.Schema.ObjectId.isValid() ๋ฐ mongoose.Types.ObjectId.isValid()๋ฅผ ์๋ํ์ง๋ง ํด๋น ์์ฑ์๋ isValid ๋ฉ์๋๊ฐ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ์ จ์ต๋๊น? ๋๋ ๋ํ mongodb์ ํ๋๊ฐ ์๊ณ ๋ ๋ค๋ฅธ ์ต์ ์ผ๋ก ์ ๊ท์๋ ์์์ ์ ์ ์์ต๋๋ค. ์ ๊ท์์ ์ฌ์ฉํ์ง ์๊ฑฐ๋ ์๊ตฌํ์ง ์๋ ๊ฒ์ ์ ํธํฉ๋๋ค('mongodb')
์ด๊ฒ์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค.
var ๋ชฝ๊ตฌ์ค = ํ์('./๋
ธ๋ ๋ชจ๋/๋ชฝ๊ตฌ์ค');
console.log(mongoose.Types.ObjectId.isValid);
// [ํจ์: isValid]
console.log(mongoose.Types.ObjectId.isValid('53cb6b9b4f4ddef1ad47f943'));
// ์ง์ค
console.log(mongoose.Types.ObjectId.isValid('bleurgh'));
// ๊ฑฐ์ง
๋ง๋ถ์ฌ์ mongodb์ ๋ฉ์๋๋ bson lib ๋ฉ์๋๋ก null์ด ์๋์ง, 12์ ๋๋ 24์ 16์ง ๋ฌธ์์ด์ ํ์ธํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ๊ท์์ ๋๋ค.
var checkForHexRegExp = ์๋ก์ด RegExp("^[0-9a-fA-F]{24}$");
๊ทธ๋์ ๊ทธ๊ฒ์ด ๊ฑฐ๊ธฐ์์ ์ฌ์ฉ๋๋ค๋ฉด ๋๋ฌด ํดํน ๋ ์ ์์ต๋๋ค.
๋ฌธ์์ด์ 12์๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ sValid()๋ ํญ์ True๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(mongoose.Types.ObjectId.isValid("zzzzzzzzzzzz")); // ์ง์ค
"zzzzzzzzzzzz"๋ ๊ธฐ์ ์ ์ผ๋ก ์ ํจํ ObjectId์ด๊ธฐ ๋๋ฌธ์ - ๊ฐ์ฒด ID์ ์ ์ผํ ์ ์ ๊ธฐ๋ฅ์ ๊ธธ์ด๊ฐ 12๋ฐ์ดํธ๋ผ๋ ๊ฒ์
๋๋ค. mongodb/js-bson#112๋ฅผ ์ฐธ์กฐํ์ธ์. ๊ธธ์ด๊ฐ 12์ธ JS ๋ฌธ์์ด์๋ 12๋ฐ์ดํธ์ ๋ชจ๋๋ก ์ ๋์ฝ๋๊ฐ ์์ต๋๋ค. ๊ธธ์ด๊ฐ 24์ธ 16์ง์ ๋ฌธ์์ด์ ํ์ธํ๋ ค๋ฉด ๋ฌธ์์ด์ด /^[a-fA-F0-9]{24}$/
์ ์ผ์นํ๋์ง ํ์ธํ์ธ์.
"zzzzzzzzzzzz"๋ ์ ํจํ ObjectId๊ฐ ์๋๋๋ค. ์๋ฅผ ๋ค์ด Mongo ์ ธ ๋ชฉ๋ก(mongodb ๋ฒ์ - 3.0.2):
> ObjectId('zzzzzzzzzzzz')
2015-04-29T18:05:20.705+0300 E QUERY Error: invalid object id: length
at (shell):1:1
> ObjectId('zzzzzzzzzzzzzzzzzzzzzzzz')
2015-04-29T18:06:09.773+0300 E QUERY Error: invalid object id: not hex
at (shell):1:1
> ObjectId('ffffffffffff')
2015-04-29T18:09:17.303+0300 E QUERY Error: invalid object id: length
at (shell):1:1
> ObjectId('ffffffffffffffffffffffff')
ObjectId("ffffffffffffffffffffffff")
mongodb ์
ธ์ ObjectId ์์ฑ์๋ 16์ง ๋ฌธ์์ด๋ง ํ์ฉํ๋๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์
๋๋ค. BSON ์ ํ ObjectId๊ฐ ์๋ ํธ์์ mongo ์
ธ์ ์ ํ ์ฌํญ์
๋๋ค. 16์ง ๋ฌธ์์ด์ด ์ผ๋ฐ์ ์ผ๋ก ObjectIds๊ฐ ํํ๋๋ ๋ฐฉ์์ด๋ผ๋ ์ ์ ๊ฐ์ํ ๋ ์ด๊ฒ์ ๋ค์ ์ง๊ด์ ์ด์ง ์์ ๊ฒฝ์ฐ์ด์ง๋ง, ๋ง์์ ๋ค์ง ์์ผ๋ฉด ์ ๊ท์ /^[a-fA-F0-9]{24}$/
์ ์ฌ์ฉํ์ญ์์ค. :)
String์ด ์๋ ObjectId ์์ฒด์ ๋ํด isValid
๋ฅผ ์ํํ๋ ค๊ณ ํ ๋ ์ false๊ฐ ๋ฐ์ํฉ๋๊น? ObjectId๊ฐ ์ ํจํ ObjectId์ด๋ฏ๋ก true๋ฅผ ๋ฐํํ์ง ์์์ผ ํฉ๋๊น? ๊ทธ๊ฒ์ ๋ง์ด ๋์ง ์์ต๋๋ค -- isValid
์ ์ ๋ฌ๋๋ ๊ฐ์ฒด๋ผ๋ฉด .toString()
๋ฅผ ํธ์ถํ ์ ์์ต๋๊น?
@niftylettuce ๋๊ธ์ #3365์์ ํ์ํฉ๋๋ค. ์ง๊ธ์ ์ฌ๋๋ค์ด ๋ชฝ๊ตฌ์ค์์ ObjectIds๋ฅผ ์๊ฐํ๋ ๋ฐฉ์๊ณผ ์ ํํ ์ผ์นํ์ง ์๋ bson ํจํค์ง์ ObjectId.isValid() ํจ์ ๋ก ์ฐ๊ธฐํฉ๋๋ค. ๊ทธ๋๋ ObjectId๊ฐ ์ฃผ์ด์ง๋ฉด true๋ฅผ ๋ฐํํ๊ธฐ ์ํด PR์ ์ด๊ฒ ์ต๋๋ค. ์ด๋ ์๋ฒฝํ๊ฒ ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค.
์ฌ๊ธฐ์์ ์ฝ๊ฐ์ ์ค๋๋ ๋ฌธ์ ๋ก ๋์๊ฐ์ ... @atcwells ์๋ฃจ์
mongoose.Types.ObjectId.isValid('53cb6b9b4f4ddef1ad47f943')
์ ์ ์๊ฒ ์ถฉ๋ถํ ์ ์๋ํ์ง๋ง ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ์ฒด ID๊ฐ ์ ํจํ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋๋ก ํ๋ ๊ฒ์ ์ฌ์ ํ โโ์ฝ๊ฐ ํดํน๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ํ์คํ ์๋ชป๋ ํ์์ ID๋ฅผ ์๋ฒ์ ๋ณด๋ด๊ณ ์ถฉ๋์ ์ผ์ผํค์ง ์๊ธฐ๋ฅผ ์ํ๋ ๊ฒ์ ๊ฝค ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์
๋๋ค.
์ด์์ ์ผ๋ก๋ ์ฝ๋ฐฑ์ err
์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฐํํ์ฌ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ HTTP ์ํ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ํต์ฌ์์ ์ ์ฉํ ๊ธฐ๋ฅ ์ด ์๋ ์ ์ค ์ผ์ด์ค๊ฐ ์์ต๋๊น? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋๋ ๋น ๋ฅธ ๊ฒ์์ํ๊ณ ์์ ์ ์ํํ๋ ์๋ฌด ๊ฒ๋์๋ ๊ฒ ๊ฐ์ต๋๋ค. https://github.com/CampbellSoftwareSolutions/mongoose-id-validator ๋ ID๊ฐ ์ค์ ๋ก ์กด์ฌํ๋์ง ํ์ธํ๊ธฐ์ํ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์์ ํ๊ณ ์ถ์ต๋๋ค โ ์ฐ๋ฆฌ๋ ๋จ์ง ์ฐ๋ฆฌ๊ฐ ์กํ์ง ์๋ ์ค๋ฅ๋ฅผ ์์ฑํ์ง ์๋๋ก ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ง๊ธ ๋ด Express ์ปจํธ๋กค๋ฌ์์ ObjectId๊ฐ ํฌํจ๋ ์์ฒญ(์: GET to https://myproject/organisations/ {id})์ ํ ๋๋ง๋ค ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
if( !mongoose.Types.ObjectId.isValid(id) ){
return res.sendStatus(400); // They didn't send an object ID
}
... ๊ทธ ์ ์ Organisation.findOne();
๊ฝค ์์ฉ๊ตฌ ๊ฐ์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์์ํด์ผ ํ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ ์๋ ค์ค ์ ์๋ค๋ฉด ํ๋ฌ๊ทธ์ธ์ด๋ ๋ฌด์ธ๊ฐ๋ฅผ ์์ฑํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ์ค์ ๋ก ์คํค๋ง ๋ฌธ์ ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ํ๋ฌ๊ทธ์ธ์ฒ๋ผ ๋ณด์ด์ง ์์ต๋๋ค ...
@shankiesan ๋น์ ์ ๊ทธ๋ ๊ฒ ํ ํ์๊ฐ ์์ต๋๋ค, mongoose๋ ID๊ฐ ์ ํจํ์ง ์์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ฝ์์ ๊ฑฐ๋ถํฉ๋๋ค.
var assert = require('assert');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
mongoose.connect('mongodb://localhost/test');
mongoose.set('debug', true);
var MyModel = mongoose.model('test', new Schema({ name: String }));
MyModel.findOne({ _id: 'invalid' }).exec().catch(error => console.error('error', error));
์ฐ์ถ:
$ node gh-1959.js
error { CastError: Cast to ObjectId failed for value "invalid" at path "_id"
at MongooseError.CastError (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/error/cast.js:19:11)
at ObjectId.cast (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/schema/objectid.js:147:13)
at ObjectId.castForQuery (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/schema/objectid.js:187:15)
at cast (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/cast.js:174:32)
at Query.cast (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/query.js:2563:10)
at Query.findOne (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/query.js:1239:10)
at /home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/query.js:2163:21
at new Promise.ES6 (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/promise.js:45:3)
at Query.exec (/home/val/Workspace/10gen/troubleshoot-mongoose/node_modules/mongoose/lib/query.js:2156:10)
at Object.<anonymous> (/home/val/Workspace/10gen/troubleshoot-mongoose/gh-1959.js:10:37)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
message: 'Cast to ObjectId failed for value "invalid" at path "_id"',
name: 'CastError',
kind: 'ObjectId',
value: 'invalid',
path: '_id',
reason: undefined }
^C
$
๋ํ ๋ค์: ํ๋ฌ๊ทธ์ธ http://thecodebarbarian.com/2015/03/06/guide-to-mongoose-plugins
์, ๋ด๊ฐ ์ผ๋ง๋ ๋จธํซ์ด์๋์ง! ๋ฌผ๋ก ๊ฑฐ์ ๋นํ ์ฝ์์ ์ฒ๋ฆฌํ์ญ์์ค ... ์์, ๋ด ๋๋. ๊ฐ์ฌ ํฉ๋๋ค @vkarpov15
ํ๋ผ๋ฏธ์ค๊ฐ ๋๋ฌด ๊ณจ์น ์ํ ๊ฒฝ์ฐ์๋ ์ฝ๋ฐฑ์ด ์๋ํฉ๋๋ค MyModel.findOne({ _id: 'invalid' }).exec(error => console.error('error', error));
:)
Valeri๊ฐ ๋งํ ์์ 12๋ฐ์ดํธ์์ ์ด๋ฏธ ๋ช
ํํ์ง ์์ ๊ฒฝ์ฐ ObjectId.isValid()
๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๋ฐฉ๊ธ ์ด๊ฒ์ผ๋ก ๊ฝค ์ ๊ตฌ์์ก์ต๋๋ค.
ObjectId.isValid('The Flagship') === true
@atcwells ๋ง์ฝ ๋น์ ์ด ๊ทธ ๋นํธ๋ฅผ ํฌํจํ๋๋ก ๋น์ ์ ๋์ ์ฐฌ์ฑ ์๊ฒฌ์ ์
๋ฐ์ดํธํ ์ ์๋ค๋ฉด ๋๋ ๋น์ ์ด ๋งํ ๊ฒ์ ๊ธฐ์ดํ์ฌ ์ฒ์์ ๊ทธ๊ฒ์ ํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ๊ณ ๋ง์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค: ObjectId.isValid('The Flagship') === true
์ฌ๋ฏธ์๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์ ๋ฌธ์ฅ์ true๋ฅผ ๋ฐํํฉ๋๋ค.
mongoose.Types.ObjectId.isValid("๋จ์ํ๋ฆฌ์นด ๊ณตํ๊ตญ")
๋ด๊ฐ (ํ์ฌ) ํ๊ณ ์๋ ๊ฒ์ promise catch์์ ์ค๋ฅ ์ ํ์ ํ์ธํ๋ ๊ฒ์ ๋๋ค. 'ObjectId'์ธ ๊ฒฝ์ฐ 404๋ฅผ ๋ฐํํฉ๋๋ค. API/์น ์๋น์ค ์๋น์์๊ฒ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์๊ฑฐ๋ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ 404๋ฅผ ๋ฐํํฉ๋๋ค.
์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
Widget.findByIdAndRemove(resourceId)
.then((result) => {
if (!result) {
let error = new Error('Resource not found');
error.status = 404;
next(error);
} else {
res.redirect(303, '/');
}
})
.catch((error) => {
if (error.kind === 'ObjectId') {
let error = new Error('Resource not found');
error.status = 404;
next(error);
} else {
next(error);
}
});
์
๋ฐ์ดํธ:
์ปจํธ๋กค๋ฌ์ ๊ฐ ๊ฒฝ๋ก ์ฒ๋ฆฌ๊ธฐ์ ์ด๊ฒ์ ์ถ๊ฐํ๋ ๋์ . ์ ์ญ catch all ์ฒ๋ฆฌ๊ธฐ์ ์ถ๊ฐํ๊ณ ์์ต๋๋ค.
์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
if (err.kind === 'ObjectId') {
err.status = 404;
}
// render the error page
res.status(err.status || 500);
res.render('error');
});
์คํค๋ง์์ ์ ํจ์ฑ์ ๊ฒ์ฌํ ์ ์์ต๋๊น? ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ๋ฐ๋ณต๋๋ ๊ฒ์ ์๋์ง๋ง ์บ์คํธ ์ค๋ฅ ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๊ณ ์ถ์ต๋๋ค.
mongoose๊ฐ MongoDB๋ง ์ฒ๋ฆฌํ ๋ isValid์ ๋ํด ์ ๊ท์ /^[a-fA-F0-9]{24}$/๋ฅผ ๊ตฌํํ ์ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๋๋ฌด ํผ๋์ค๋ฝ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ํ ์๊ฐ์ ํ ์ ํ์ผ๋ฉฐ ๊ฒฐ์ฝ ์์์ฐจ๋ฆฌ์ง ๋ชปํ ์ด๋ฆฌ์์ ์ผ์ด ๋์์ต๋๋ค.
์ด npm ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. https://www.npmjs.com/package/valid-objectid
๊ทธ๊ฒ์ ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค
์ด์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ง๋ค์์ต๋๋ค.
function isObjectId(value) {
try {
const { ObjectId } = mongoose.Types;
const asString = value.toString(); // value is either ObjectId or string or anything
const asObjectId = new ObjectId(asString);
const asStringifiedObjectId = asObjectId.toString();
return asString === asStringifiedObjectId;
} catch (error) {
return false;
}
}
@mstmustisnt ๊ฐ์ด "123"์ด๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋ ์ ์๋๋ก ์์ ObjectId.isValid()
์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํ์ต๋๋ค. ๋ด ์ฌ์ฉ ์ฌ๋ก์์๋ ID ๋๋ url-slug๋ก ๋ฆฌ์์ค๋ฅผ ์ป์ ์ ์๊ธฐ๋ฅผ ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์:
GET /users/59f5e7257a92d900168ce49a
... ๋๋ ...
GET /users/andrew-shankie
...๋ด ์ปจํธ๋กค๋ฌ์์ ์ด๊ฒ์ด ์ ์๋ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
const { id } = req.params;
const query = {
$or: [{ slug: id }],
};
if (mongoose.Types.ObjectId.isValid(id)) query.$or.push({ _id: id });
User.findOne(query)
.exec((err, user) => { ... }
์ด ๊ฒฝ์ฐ 12๋ฐ์ดํธ ๋ฌธ์์ด์ ์ฌ์ ํ โโ์ ํจํ ๊ฐ์ฒด ID์ด๋ฉฐ, ์ด๋ฅผ ๊ฒ์ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๊ธธ์ด๊ฐ 0์ธ ๋ฐฐ์ด์ด ๋ฐํ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ $or
์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ URL ์ฌ๋ฌ๊ทธ(๋ด ๋ค๋ฅธ ๊ฐ๋ฅํ ์ต์
)๋ก ๊ฒ์ํฉ๋๋ค.
๊ฐ์ฅ ์ฐ์ํ ์๋ฃจ์ ์ ์๋์ง๋ง ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค.
@victorbadila ๋ค, ๋ง์ต๋๋ค. ๋๋ ๋จ์ง ํํธ๋ฅผ ์ฃผ์๋ค. ๋ด ์๊ฒฌ์ ํธ์งํ๊ณ ์ค์ ๋ก ๋ด๊ฐ ์ค์ ๋ก ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ๋ฐฐ์นํฉ๋๋ค.
validator.js ์๋ isMongoId
๋ฉ์๋๊ฐ ๋ด์ฅ๋์ด ์์ต๋๋ค.
mongoose๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค ํญ์ ๋ช ๊ฐ์ง ์ ์ ๋์ฐ๋ฏธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฅํฉ๋๋ค.
const mongoose = require('mongoose');
const {Types: {ObjectId}} = mongoose;
//Helper to check if an ID is an object ID
mongoose.isObjectId = function(id) {
return (id instanceof ObjectId);
};
//Helper to validate a string as object ID
mongoose.isValidObjectId = function(str) {
if (typeof str !== 'string') {
return false;
}
return str.match(/^[a-f\d]{24}$/i);
};
์ด๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๊ธฐํ ์คํฌ๋ฆฝํธ์ ์ผ๋ถ๋ก ์คํํ ์ ์์ผ๋ฏ๋ก ์ฑ์์ ๋ฉ์๋๋ฅผ ํญ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ObjectId.isValid(id)๊ฐ true์ด๋ฉด (new ObjectId(id).toString()) ์ ๊ฐ๊ณผ id๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
const mongoose = require('mongoose');
const {Types: {ObjectId}} = mongoose;
const validateObjectId = (id) => ObjectId.isValid(id) && (new ObjectId(id)).toString() === id;
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ ๋๋ฅผ ์ํด ์๋ํฉ๋๋ค.
var ๋ชฝ๊ตฌ์ค = ํ์('./๋ ธ๋ ๋ชจ๋/๋ชฝ๊ตฌ์ค');
console.log(mongoose.Types.ObjectId.isValid);
// [ํจ์: isValid]
console.log(mongoose.Types.ObjectId.isValid('53cb6b9b4f4ddef1ad47f943'));
// ์ง์ค
console.log(mongoose.Types.ObjectId.isValid('bleurgh'));
// ๊ฑฐ์ง