UTF-8 验证
概述
在本指南中,您可以了解如何启用或禁用 Node.js 驱动的 UTF-8 验证功能。UTF-8 是一种字符编码规范,确保了在大多数操作系统、应用程序和语言字符集中的兼容性和一致性。
如果您 启用 验证,当驱动程序尝试转换包含无效 UTF-8 字符的数据时,会抛出错误。验证增加了处理开销,因为它需要检查数据。
如果您 禁用 验证,则您的应用程序避免了验证处理开销,但不能保证无效 UTF-8 数据的一致性展示。
默认情况下,驱动程序在来自 MongoDB 的数据上启用 UTF-8 验证。当解析从 MongoDB 发送到您应用程序的数据时,它会检查传入的文档中是否有任何未以有效 UTF-8 格式编码的字符。
注意
阅读下面的部分以了解如何使用Node.js驱动程序设置UTF-8验证。
指定UTF-8验证设置
您可以通过定义来指定驱动程序是否执行UTF-8验证:在创建客户端、引用数据库或集合或调用CRUD操作时,在选项参数中设置enableUtf8Validation
。如果您省略了设置,驱动程序将启用UTF-8验证。
请参阅以下代码示例,演示如何在客户端、数据库、集合或CRUD操作中禁用UTF-8验证。
// 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 });
如果您的应用程序在启用enableUtf8Validation
选项的情况下从MongoDB读取无效的UTF-8,则会抛出一个包含以下消息的BSONError
。
Invalid UTF-8 string in BSON document
设置验证范围
enableUtf8Validation
设置自动应用于您包含该设置的实例的作用域,以及该实例上的调用创建的任何其他对象。
例如,如果您在实例化数据库对象的调用中包含此选项,则从该对象构建的任何集合实例都将继承此设置。您在该集合实例上调用的任何操作也将继承此设置。
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' });
您可以通过在构造对象实例或调用操作时包含它来在任何作用域级别覆盖此设置。
例如,如果您在集合对象上禁用验证,则可以在该集合的个别CRUD操作调用中覆盖设置。
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' });