javascript – 使用async.js深度填充sails.js
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 使用async.js深度填充sails.js,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2920字,纯文字阅读大概需要5分钟。
内容图文
我在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
内容总结
以上是互联网集市为您收集整理的javascript – 使用async.js深度填充sails.js全部内容,希望文章能够帮你解决javascript – 使用async.js深度填充sails.js所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。