编程语言
首页 > 编程语言> > javascript – 使用async.js深度填充sails.js

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

作者:互联网

我在sails.js(v12)中的函数存在很大问题.我正在尝试使用async(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().
否则,默认为JSON实现将覆盖对模型关联数据所做的任何更改.

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

另一方面,使用JS .map或_.map代替async.map,因为在函数内部没有异步操作.否则您可能会遇到RangeError:超出最大调用堆栈大小问题.

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

标签:async-js,javascript,arrays,object,sails-js
来源: https://codeday.me/bug/20191003/1848080.html