MongoDB Node проверить, действительно ли objectid
Как проверить, действителен ли ObjectID с помощью драйвера Node
Я пробовал:
var BSON = mongo.BSONPure;
console.log("Validity: " + BSON.ObjectID.isValid('ddsd'))
Но я продолжаю получать исключение вместо истинного или ложного. (Исключение составляет только "throw e;//process.nextTick error или событие" error "при первом тике
Ответы
Ответ 1
Не уверен, откуда взята функция isValid()
но она не в node-mongodb-native.
Вы можете использовать это регулярное выражение, если хотите проверить строку из 24 шестнадцатеричных символов.
var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$");
Взято с github.com/mongodb/js-bson/.../objectid.js
Ответ 2
isValid()
находится в библиотеке js-bson, которая является зависимой от node-mongodb-native.
Для тех, кто находит этот вопрос, я не рекомендую воссоздавать этот метод, как рекомендуется в других ответах. Вместо этого продолжайте использовать node-mongodb-native, как это было в оригинальном постере, в следующем примере будет доступен метод isValid()
в js-bson.
var mongodb = require("mongodb"),
objectid = mongodb.BSONPure.ObjectID;
console.log(objectid.isValid('53fbf4615c3b9f41c381b6a3'));
Обновление за июль 2018 года: текущий способ сделать это:
var mongodb = require("mongodb")
console.log(mongodb.ObjectID.isValid(id))
Ответ 3
Как расширение Eat at Joes answer... Это справедливо в node -mongodb-native 2.0
var objectID = require('mongodb').ObjectID
objectID.isValid('54edb381a13ec9142b9bb3537') - false
objectID.isValid('54edb381a13ec9142b9bb353') - true
objectID.isValid('54edb381a13ec9142b9bb35') - false
Ответ 4
Фрагмент @GianPaJ велик, но его нужно немного расширить, чтобы охватить не-hex objectID. Строка 32 того же файла указывает, что идентификатор объекта также может составлять 12 символов. Эти ключи преобразуются в шестнадцатеричный идентификатор объекта 24 символов с помощью драйвера mongodb.
function isValidObjectID(str) {
// coerce to string so the function can be generically used to test both strings and native objectIds created by the driver
str = str + '';
var len = str.length, valid = false;
if (len == 12 || len == 24) {
valid = /^[0-9a-fA-F]+$/.test(str);
}
return valid;
}
Ответ 5
Я отправил запрос на перенос в библиотеку js-bson, которая предоставляет метод isValid, поскольку логика проверки строки objectid уже была там.
Ответ 6
Если вы используете mongoose
вы можете использовать mongoose для проверки, а не в зависимости от joi.
if (!mongoose.Types.ObjectId.isValid(req.id)) {
return res.status(400).send("Invalid object id");
}
Ответ 7
Вы можете использовать Cerberus и создать настраиваемую функцию для проверки и ObjectId
from cerberus import Validator
import re
class CustomValidator(Validator):
def _validate_type_objectid(self, field, value):
"""
Validation for `objectid` schema attribute.
:param field: field name.
:param value: field value.
"""
if not re.match('[a-f0-9]{24}', str(value)):
self._error(field, ERROR_BAD_TYPE % 'ObjectId')
## Initiate the class and validate the information
v = CustomValidator()
schema = {
'value': {'type': 'objectid'}
}
document = {
'value': ObjectId('5565d8adba02d54a4a78be95')
}
if not v(document, schema):
print 'Error'