据我了解,没有 .toObect()
在 JavaScript 中,但它在 mongoose 中用于将 mongoose 文档更改为对象,以便您可以使用 JavaScript 内置函数。
我不知道什么时候使用它。有时当我得到一个文档数组时,我可以在返回的数组上使用 forEach ,然后其他时候我会花 20 分钟找出 forEach 不起作用的原因。然后我会添加 .toObject
到返回的数组,forEach 就会起作用。类似的事情。我不确定我的内存是 forEach 还是其他什么。
无论如何,这是最新的奇怪问题。我在 EJS,我需要做 <% console.log("typeof", user.toObject().hasOwnProperty("facebook")) %>
工作而不是 <% console.log("typeof", user.hasOwnProperty("facebook")) %>
。带有 .toObject()
的那个控制台:typeof true
没有控制台的一款typeof false
。这对我来说似乎很奇怪。用户是 Mongoose 文档吗?我如何在ejs中使用.toObject?哦,等一下。我只是想是因为它在“<%%>
”中,它连接到服务器端代码,也许我的server.js
中需要 Mongoose 。 为什么我必须使用 toObject 来获取 true
值?
我认为不需要使用 .toObject()
的任何方式
这是我的 .js 文件中的内容:res.render("editProfile", {aboutUser : returnedUser, user : req.user});
我认为req.user
是来自护照而不是 Mongoose 。
用户对象
{ _id: 581a2chan3changed727, defaultImage: 'https://scontefrfrxxffbcdn.net/v/t1.0-1/s148x148/29731_575634691740_1085883_n.jpg?oh=797bc81addf3611309changedoe=588AC839', urlname: 'Jacchanged', momented: 'Nov 2, 2016', username: 'Jack Schuldenfrei', __v: 0, usefulness: [], createdOn: Wed Nov 02 2016 14:15:47 GMT-0400 (Eastern Daylight Time), shortId: 'rkn8powgl', pointsRecord: [], repPoints: 0, facebook: { posts: '{"email":"jschuldenfreiGTGTGTgchanged,"name":"Jack Schuchange","gender":"male","picture":{"data":{"height":148,"is_silhouette":false,"url":"https:\\/\\frfr.net\\/v\\/t1.0-1\\/s148x148\\/29731_575634691740_1fr5883_n.jpg?oh=797bc81addf36113e0933a67eef32ab9&oe=588AC839","width":93}},"id":"10100584555845400"}', gender: 'male', email: 'jschuldenfredu', name: 'Jack changes', token: 'EAAPs693O1UMBAHwTcyZAPtRiXrwvxrBWhGCJZCQlAIfHRZAiCLY3tYDVoviB4yDrK68WrsUnuxlcHfUJE984aAvWOnFZASqbUjYZAhHnsL0mFCZCNRQwsn3oJn1acu1qnSPFko6I3ShZAtPIMumrVlpVxR0ZD', id: '1010058386584400' }, reviews: [] } { _id: 581a2d53380e4c70ac728, userId: 581a2d380e4c7037aac727, username: 'Jack changed', urlname: 'Jachanged', __v: 0, question1: { name: 'This is for question1' } }
我通过执行 <%=user%>
来获取该用户对象在 ejs 文件中。
最佳答案
你想要的是.lean()
通常护照有一个序列化配置,看起来像
// Serialize sessions
passport.serializeUser(function (user, done) {
done(null, user.id);
});
// Deserialize sessions
passport.deserializeUser(function (id, done) {
User.findOne({
_id: id
}, '-salt -password', function (err, user) {
done(err, user);
});
});
更改反序列化过程,例如
// Deserialize sessions
passport.deserializeUser(function (id, done) {
User.findOne({
_id: id
}, '-salt -password')
.lean() // lean converts mongoose.Document to Plain Javascript Object
.exec(function (err, user) {
console.log(user instanceof mongoose.Document) // false
done(err, user);
});
});
关于javascript - 为什么我必须在 mongoose 中使用 `toObject()` 来确定对象是否具有属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40391330/