gpt4 book ai didi

javascript - 使用 async.js 深度填充 sails.js

转载 作者:行者123 更新时间:2023-12-01 03:47:14 25 4
gpt4 key购买 nike

我在 sails.js (v12) 中的函数有一个大问题。我正在尝试使用异步(v2.3)获取所有 userDetail 来深度填充我的用户信息:

UserController.js:

 userDetail: function (req, res) {
var currentUserID = authToken.getUserIDFromToken(req);
async.auto({
//Find the User
user: function (cb) {
User
.findOne({ id: req.params.id })
.populate('userFollowing')
.populate('userFollower')
.populate('trips', { sort: 'createdAt DESC' })
.exec(function (err, foundedUser) {
if (err) {
return res.negotiate(err);
}
if (!foundedUser) {
return res.badRequest();
}
// console.log('foundedUser :', foundedUser);
cb(null, foundedUser);
});
},
//Find me
me: function (cb) {
User
.findOne({ id: currentUserID })
.populate('myLikedTrips')
.populate('userFollowing')
.exec(function (err, user) {
var likedTripIDs = _.pluck(user.myLikedTrips, 'id');
var followingUserIDs = _.pluck(user.userFollowing, 'id');
cb(null, { likedTripIDs, followingUserIDs });
});
},

populatedTrip: ['user', function (results, cb) {
Trip.find({ id: _.pluck(results.user.trips, 'id') })
.populate('comments')
.populate('likes')
.exec(function (err, tripsResults) {
if (err) {
return res.negotiate(err);
}
if (!tripsResults) {
return res.badRequest();
}
cb(null, _.indexBy(tripsResults, 'id'));
});
}],

isLiked: ['populatedTrip', 'me', 'user', function (results, cb) {
var me = results.me;
async.map(results.user.trips, function (trip, callback) {
trip = results.populatedTrip[trip.id];

if (_.contains(me.likedTripIDs, trip.id)) {
trip.hasLiked = true;
} else {
trip.hasLiked = false;
}

callback(null, trip);
}, function (err, isLikedTrip) {
if (err) {
return res.negotiate(err);
}
cb(null, isLikedTrip);
});
}]
},

function finish(err, data) {
if (err) {
console.log('err = ', err);
return res.serverError(err);
}

var userFinal = data.user;
//userFinal.trips = data.isLiked;
userFinal.trips = "test";
return res.json(userFinal);
}
);
},

我几乎尝试了所有方法来修复此问题,但没有任何效果...我能够获取我的行程数组(data.isLiked),但无法获取我的 userFINal 行程。

我尝试在 userFinal.trips 上设置字符串值:

JSON 响应

 {
"trips": [], // <-- my pb is here !!
"userFollower": [
{
"user": "5777fce1eeef472a1d69bafb",
"follower": "57e44a8997974abc646b29ca",
"id": "57efa5cf605b94666aca0f11"
}
],
"userFollowing": [
{
"user": "57e44a8997974abc646b29ca",
"follower": "5777fce1eeef472a1d69bafb",
"id": "5882099b9c0c9543706d74f6"
}
],
"email": "test2@test.com",
"userName": "dany",
"isPrivate": false,
"bio": "Hello",
"id": "5777fce1eeef472a1d69bafb"
}

问题

我应该如何将我的旅行数组 (isLiked) 粘贴到我的用户旅行数组?为什么我的结果不是我期望的?

感谢您的回答。

最佳答案

在覆盖模型中的任何关联之前使用 .toJSON()
否则,默认的 toJSON 实现将覆盖对模型关联数据所做的任何更改。

var userFinal = data.user.toJSON(); // Use of toJSON
userFinal.trips = data.isLiked;
return res.json(userFinal);
<小时/>

另外注意一下,使用JS .map_.map 代替 async.map,因为里面没有异步操作功能。否则,您可能会遇到 RangeError: Maximum call stack size returned 问题。

此外,最好仅从最终回调返回任何响应。 (从 async.auto 的第一个参数中删除 res.negotiateres.badRequest)。它允许做出响应方法 terminal

关于javascript - 使用 async.js 深度填充 sails.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43497196/

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