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 habilitas la validación, el controlador arroja un error cuando intenta convertir datos que contienen caracteres UTF-8 no válidos. La validación agrega sobrecarga de procesamiento ya que necesita verificar los datos.
Si desactivas la validación, tu aplicación evita los gastos en general del procesamiento de validación, pero no puede garantizar una presentación coherente de datos UTF-8 no válidos.
Por defecto, el driver activa la validación UTF-8 en los datos procedentes de MongoDB. Verifica los documentos entrantes en busca de cualquier carácter que no esté codificado en un formato UTF-8 válido cuando analiza los datos enviados desde MongoDB a tu aplicación.
Nota
Esta versión del controlador de Node.js sustituye automáticamente los subrogados solitarios inválidos por el carácter de reemplazo antes de la validación cuando se envían datos a MongoDB. Por lo tanto, la validación solo arroja un error cuando la configuración está habilitada y el driver recibe datos de documentos invalidos UTF-8 de MongoDB.
Lea las secciones a continuación para aprender cómo establecer la validación UTF-8 utilizando el controlador Node.js.
Especifica la configuración de validación UTF-8
Puede especificar si el driver realiza la validación de UTF-8 definiendo el ajuste de configuración enableUtf8Validation en el parámetro de opciones al crear un cliente, hacer referencia a una base de datos o colección, o al llamar 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
Establezca el Ámbito de Validación
La configuración enableUtf8Validation se aplica automáticamente al ámbito de la instancia de objeto en el que la incluiste 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' });