【发布时间】:2016-11-03 07:51:58
【问题描述】:
我是 MEAN-stack 应用程序的新手,我试图在 mean-stack 中创建一个社交媒体应用程序。我创建了 UserModel.js 文件来保存用户的全部详细信息,如下所示,
UserModel.js 文件
var Address = {
pincode : "",
post : "",
city : "",
district : "",
state : "",
country : "",
};
var Privacy = {
public :true,
friendsOnly : false,
friendsOfFriendsOnly:false,
ImagepostPrivacy : false
};
var Education = {
primarySchool : "",
highSchool : "",
higherSecondary : "",
college : "",
};
var UserModel = {
id : "",
name : "",
lastname : "",
age : 0,
email:"",
phone:"",
username : "",
password : "",
active : true
};
function getUserModel(){
return{
userBasicDetails : UserModel,
userAddress : Address,
userPrivacy : Privacy,
userEducation : Education,
userFollowings : [],
userFollowers : [],
userFriends : []
}
};
module.exports.Usermodel = getUserModel;
我认为它是 java 的 POJO 类,然后在 userService.js 文件中我访问了这个对象并将 req.body() 的对应值分配给了 Usermodel 并且我将这个 Usermodel 对象转换为 json 并作为预计。
为“用户”集合创建和插入对象的代码,
var userModel = require("../../../models/UserModel");
var con = require("../../database/DbConnection");
var userObject = null;
function registerNewUser(registerdata,callback) {
if(!validateInitialRegisteration(registerdata)){// some validation stuff
return callback(new Error("Invalid data"));
}else{
userObject = createUsedrObject(registerdata);
console.log("object before insertion %j",userObject);// got converted json
con.database().collection('users',function (err,usersCollection) {
usersCollection.insert(userObject,{w:1},function (err) {
if(err){
console.log("error %j",err);
callback(err,null);
}else{
callback(null,userObject);
}
})
});
}
}
/**
*This function will make the user collection object
**/
function createUsedrObject(obj){
var userObject = userModel.Usermodel();
userObject.userBasicDetails.name = obj.firstname;
userObject.userBasicDetails.password = obj.password;
userObject.userBasicDetails.username = obj.username;
return userObject;
}
然后我将对象插入到我的“用户”命名集合中,然后我编写了函数来从“用户”命名集合中检索数据
function loginCheck(credentials,callback){
if(!credentials){
return callback(new Error("Invalid data"));
}else{
con.database().collection('users',function (err,usersCollection) {
if(err){
return callback(err,null);
}
else{
console.log("fetched data %j",usersCollection.find()); // here I am getting a log like 'fetched data [Circular]'
//callback(null,usersCollection.find());
}
});
}
};
在下面给出插入之前我安慰过的预期 json
{ userBasicDetails:
{ id: '',
name: 'vishnu',
lastname: '',
age: 0,
email: '',
phone: '',
username: 'kr.vishnu401@gmail.com',
password: '1234',
active: true },
userAddress:
{ pincode: '',
post: '',
city: '',
district: '',
state: '',
country: '' },
userPrivacy:
{ public: true,
friendsOnly: false,
friendsOfFriendsOnly: false,
ImagepostPrivacy: false },
userEducation:
{ primarySchool: '',
highSchool: '',
higherSecondary: '',
college: '' },
userFollowings: [],
userFollowers: [],
userFriends: [] }
db 中的集合是
> db.users.find({"_id":ObjectId("581ae4994878ad1a84fa0c77")})
{ "_id" : ObjectId("581ae4994878ad1a84fa0c77"), "userBasicDetails" : { "id" : "", "name" : "vishnu", "lastname" : "", "age" : 0, "email" : "", "phone" : "", "username" : "vishnu@gmail.com", "password" : "123456", "active" : true }, "userAddress" : { "pincode" : "", "post" : "", "city" : "", "district" : "", "state" : "", "country" : "" }, "userPrivacy" : { "public" : true, "friendsOnly" : false, "friendsOfFriendsOnly" : false, "ImagepostPrivacy" : false }, "userEducation" : {"primarySchool" : "","highSchool" : "", "higherSecondary" : "", "college" : ""}, "userFollowings" : [ ], "userFollowers" : [ ], "userFriends: [ ] }
由于它是循环类型,我无法将此对象转换为 json,但插入的对象我在 db 操作之前转换为 json。我想我在某个地方弄乱了这些概念。如果您遇到同样的问题,请告诉我。
【问题讨论】:
-
您发布了相当多的信息,而实际上,需要检查的是 TO-JSON 转换的 INPUT。 This site 可以帮助您确定您的输入是否正确形成为 JSON 对象。
-
非常感谢@FDavidov 我发现 "_id" : ObjectId("581ae4994878ad1a84fa0c77") 在 json 中生成错误现在我需要通过找到避免结果数据中的对象 id 的解决方案来解决这个问题,
-
如果我的建议有帮助,您可以考虑对我的评论进行投票。谢谢。
标签: json node.js mongodb express mean-stack