当我使用此架构检索和修改大厅时,它似乎会自动转换类型。我找不到该功能的文档,所以我想知道是否误将其他东西用于自动广播。
我将密码和所有者的类型转换为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));
答案 0 :(得分:1)
是的,如果可能的话,猫鼬会强制转换值。
这里的问题是您的架构将类型 owner
定义为 String
。因此值 true
或 false
将被转换为字符串。
这就是您得到 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);
});