gpt4 book ai didi

javascript - 为什么我必须在 mongoose 中使用 `toObject()` 来确定对象是否具有属性?

转载 作者:行者123 更新时间:2023-12-03 05:44:20 24 4
gpt4 key购买 nike

据我了解,没有 .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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com