Подтвердить что ты не робот

MongoDB Node проверить, действительно ли objectid

Как проверить, действителен ли ObjectID с помощью драйвера Node

Я пробовал:

var BSON = mongo.BSONPure;
console.log("Validity: "  + BSON.ObjectID.isValid('ddsd'))

Но я продолжаю получать исключение вместо истинного или ложного. (Исключение составляет только "throw e;//process.nextTick error или событие" error "при первом тике

4b9b3361

Ответ 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'