当我用这个Schema检索和修改一个大厅时,它似乎自动转换类型。我找不到该功能的文档,所以我想知道我是不是把其他东西误认为自动转换了。
我将password和owner类型转换为true或false,因为这是一个公开的API端点,每个人都可以查看。
当我运行匿名器函数时,它运行并生成password : "true",而不是password: true。我希望它发送password: true,但我不确定这是否可能。
// Schema
const LobbySchema = new mongoose.Schema({
name: String,
password: String,
owner: { type: String, require: true },
Player: [],
});
// Anonymizer function
lobby.password = !!lobby.password;
lobby.owner = lobby.owner === user ? true: false;
res.send(JSON.stringify(lobby));发布于 2021-01-10 18:50:20
是的,Mongoose会在可能的情况下进行值转换。
这里的问题是您的模式将类型owner定义为String。因此,值true或false将被强制转换为string。
这就是你得到password : "true"的原因。
要获取布尔值形式的密码,可以在模式中设置Boolean或使用Custom casting
未经过测试,但遵循文档应与以下内容类似:
const originalCast = mongoose.Boolean.cast();
mongoose.Boolean.cast(v => {
if (v === 'true') {
return true;
}
if (v === 'false') {
return false;
}
return originalCast(v);
});https://stackoverflow.com/questions/62674990
复制相似问题