我正在使用以下环境
NodeJS:5.7.1
Mongo DB:3.2.3
MongoDB(NodeJS驱动程序):2.1.18
TypeScript:1.8
我使用Typescript创建了一个Object作为
class User {
private _name:string;
private _email:string;
public get name():string{
return this._name;
}
public set name(val:string){
this._name = val;
}
public get email():string{
return this._email;
}
public set email(val:string){
this._email = val;
}
}
使用mongodb驱动程序API,我试图将对象插入
var user:User = new User();
user.name = "Foo";
user.email = "foo@bar.com";
db.collection('users').insertOne(user)
.then(function(r){..}).catch(function(e){..});
当我从mongo控制台查询时,检查插入的值,使用
db.users.find({}).pretty();
它给了我以下输出。
{
"_name":"Foo",
"_email":"foo@bar.com",
"name":"Foo",
"email":"foo@bar.com"
}
为什么要存储私有变量?如何防止它存储私有变量。
编辑:1
既然,我无法停止开发应用程序,我暂时使用了一种解决方法。域对象现在有一个额外的方法toJSON
,它提供了我希望存储在MongoDB中的结构。
e.g。
public toJSON():any{
return {
"name":this.name
...//Rest of the properties.
};
}
我也在组合对象上调用toJSON()
。
答案 0 :(得分:1)
为了真正控制事物,我建议在每个可持久对象中都有一个方法,它返回要为该对象保存的数据。例如:
class User {
private _name: string;
private _email: string;
public get name(): string{
eturn this._name;
}
public set name(val: string) {
this._name = val;
}
ublic get email(): string{
return this._email;
}
public set email(val: string){
this._email = val;
}
public getData(): any {
return {
name: this.name,
email: this.email
}
}
}
您可能不仅仅是要保留的User
,还可以使事情变得更通用:
interface PersistableData {}
interface Persistable<T extends PersistableData> {
getData(): T;
}
interface UserPersistableData extends PersistableData {
name: string;
email: string;
}
class User implements Persistable<UserPersistableData> {
// ...
public getData(): UserPersistableData {
return {
name: this.name,
email: this.email
}
}
}
然后你就做了:
db.collection('users').insertOne(user.getData())