Overview
En esta guía, puede aprender cómo activar o desactivar la funcionalidad de validación UTF-8 del driver Node.js. UTF-8 es una especificación de codificación de caracteres que garantiza la compatibilidad y una presentación coherente en la mayoría de los sistemas operativos, aplicaciones y conjuntos de caracteres de idiomas.
Si habilita la validación, el controlador genera un error al intentar convertir datos que contienen caracteres UTF-8 no válidos. La validación añade una sobrecarga de procesamiento, ya que necesita verificar los datos.
Si deshabilita la validación, su aplicación evita la sobrecarga del procesamiento de validación, pero no puede garantizar la presentación consistente de datos UTF-8 no válidos.
De forma predeterminada, el controlador habilita la validación UTF-8 en los datos de MongoDB. Al analizar los datos enviados desde MongoDB a su aplicación, comprueba si los documentos entrantes contienen caracteres que no estén codificados en un formato UTF-8 válido.
Nota
Esta versión del controlador Node.js sustituye automáticamente los valores no válidos. reemplazos únicos con el carácter de reemplazo antes de la validación cuando envía datos a MongoDB. Por lo tanto, la validación sólo arroja un error cuando la configuración está habilitada y el driver recibe datos de documento UTF-8 no válidos desde MongoDB.
Lea las secciones a continuación para aprender cómo configurar la validación UTF-8 usando el controlador Node.js.
Especifica la configuración de validación UTF-8
Se puede especificar si el controlador realiza la validación UTF-8 definiendo la enableUtf8Validation estableciendo en el parámetro de opciones cuando se crea un cliente, se hace referencia a una base de datos o colección, o se ejecuta una operación CRUD. Si omites la configuración, el controlador habilita la validación UTF-8.
Consulta lo siguiente para obtener ejemplos de código que demuestren cómo desactivar la validación UTF-8 en el cliente, base de datos, colección u operación CRUD:
// disable UTF-8 validation on the client new MongoClient('<connection uri>', { enableUtf8Validation: false }); // disable UTF-8 validation on the database client.db('<database name>', { enableUtf8Validation: false }); // disable UTF-8 validation on the collection db.collection('<collection name>', { enableUtf8Validation: false }); // disable UTF-8 validation on a specific operation call await myColl.findOne({ title: 'Cam Jansen'}, { enableUtf8Validation: false });
Si tu aplicación lee UTF-8 inválido de MongoDB mientras la opción enableUtf8Validation está activada, lanza un BSONError que contiene el siguiente mensaje:
Invalid UTF-8 string in BSON document
Establecer el alcance de la validación
La configuración enableUtf8Validation se aplica automáticamente al ámbito de la instancia del objeto en el que la incluyó y a cualquier otro objeto creado por llamadas en esa instancia.
Por ejemplo, si incluye la opción en la llamada para instanciar un objeto base de datos, cualquier instancia de colección que cree a partir de ese objeto heredará la configuración. Cualquier operación que llames en esa instancia de colección también hereda la configuración.
const database = client.db('books', { enableUtf8Validation: false }); // The collection inherits the UTF-8 validation disabled setting from the database const myColl = database.collection('mystery'); // CRUD operation runs with UTF-8 validation disabled await myColl.findOne({ title: 'Encyclopedia Brown' });
Puedes anular la configuración en cualquier nivel de alcance incluyéndola al construir la instancia del objeto o al llamar a una operación.
Por ejemplo, si deshabilitas la validación en el objeto de colección, puedes anular la configuración en llamadas individuales de operaciones CRUD en esa colección.
const collection = database.collection('mystery', { enableUtf8Validation: false }); // CRUD operation runs with UTF-8 validation enabled await myColl.findOne({ title: 'Trixie Belden' }, { enableUtf8Validation: true }); // CRUD operation runs with UTF-8 validation disabled await myColl.findOne({ title: 'Enola Holmes' });