Overview
En esta guía, aprenderá a habilitar o deshabilitar la función de validación UTF- del controlador Node.js. UTF-8 8 es una especificación de codificación de caracteres que garantiza la compatibilidad y la presentación consistente 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 contienen8 caracteres UTF- 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 de8 datos UTF- 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. Sustitutos solitarios con el carácter de reemplazo antes de la validación al enviar datos a MongoDB. Por lo tanto, la validación solo genera un error cuando la configuración está habilitada y el controlador recibe8 datos de documento UTF- no válidos de MongoDB.
Lea las secciones a continuación para aprender cómo configurar la validación UTF-8 usando el controlador Node.js.
Especifique la configuración de validación UTF-8
Puede especificar si el controlador realiza la validación UTF-8 definiendo el enableUtf8Validation Configuración en el parámetro de opciones al crear un cliente, hacer referencia a una base de datos o colección, o ejecutar una operación CRUD. Si se omite esta configuración, el controlador habilita la validación UTF-8.
Consulte los siguientes ejemplos de código que demuestran cómo deshabilitar la validación UTF-8 en el cliente, la base de datos, la colección o la 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 su aplicación lee UTF-8 no válido de MongoDB mientras la opción enableUtf8Validation está habilitada, genera 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 de base de datos, cualquier instancia de colección que construya a partir de ese objeto heredará la configuración. Cualquier operación que invoque en esa instancia de colección también heredará 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' });
Puede 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 deshabilita la validación en el objeto de colección, puede anular la configuración en llamadas de operación CRUD individuales 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' });