我如何替换 sails 中从数据库返回的一些属性
how do i replace some properties returned from database in sails
所以我正在尝试替换从 sails 中的数据库查询的数据的字段。
async.waterfall( [
function getscores(callback) {
Score.find({course : courseId}).paginate({page : 1 , limit: 10}).populate('course')
.exec(function(err,data) {
callback(null,data);
});
}
, function addUserInfo(result,callback) {
for(var i=0; i < result.length; i++){
result[i].user = User.findOne({id : result[i].user}).exec(function(err,data) {
var temp = {
"name" : data.name,
"id" : data.id,
"user_id" : data.user_id
}
return temp;
});
}
res.json(messageGenerator(200, 'Sucecss', result));
}],function(err) {
console.log(err);
}
);
第一个函数 'getScores' return 是分数数组,但每个分数 属性 只有一个用户 ID。现在在 addUserInfo 函数中,我希望能够将用户名添加到分数 属性.
但是上面的代码没能return里面的用户。 score 的用户 属性 为空。我相信在程序添加用户之前已经发送了响应属性(由于数据库适配器的异步性)。
经过简短的评论聊天后,addUserInfo
函数的以下替换应该可以帮助您实现您想要的:
function addUserInfo(results,callback) {
async.map(results, function(result, callback) {
User.findOne({id : result.user}).exec(function(err, data) {
callback(err, Object.assign(result, {
"user": {
"name" : data.name || null,
"id" : data.id || null,
"user_id" : data.user_id || null
}
}));
});
}, function(err, output) {
return res.json(messageGenerator(200, "Success", output))
});
}
异步映射允许我们异步迭代结果,允许我们通过提供 callback
和新的 result
作为第二个参数来修改 result
。 Final 函数是我们的最终回调,它提供了沿途发生的任何 err
和我们的新数组 output
.
所以我正在尝试替换从 sails 中的数据库查询的数据的字段。
async.waterfall( [
function getscores(callback) {
Score.find({course : courseId}).paginate({page : 1 , limit: 10}).populate('course')
.exec(function(err,data) {
callback(null,data);
});
}
, function addUserInfo(result,callback) {
for(var i=0; i < result.length; i++){
result[i].user = User.findOne({id : result[i].user}).exec(function(err,data) {
var temp = {
"name" : data.name,
"id" : data.id,
"user_id" : data.user_id
}
return temp;
});
}
res.json(messageGenerator(200, 'Sucecss', result));
}],function(err) {
console.log(err);
}
);
第一个函数 'getScores' return 是分数数组,但每个分数 属性 只有一个用户 ID。现在在 addUserInfo 函数中,我希望能够将用户名添加到分数 属性.
但是上面的代码没能return里面的用户。 score 的用户 属性 为空。我相信在程序添加用户之前已经发送了响应属性(由于数据库适配器的异步性)。
经过简短的评论聊天后,addUserInfo
函数的以下替换应该可以帮助您实现您想要的:
function addUserInfo(results,callback) {
async.map(results, function(result, callback) {
User.findOne({id : result.user}).exec(function(err, data) {
callback(err, Object.assign(result, {
"user": {
"name" : data.name || null,
"id" : data.id || null,
"user_id" : data.user_id || null
}
}));
});
}, function(err, output) {
return res.json(messageGenerator(200, "Success", output))
});
}
异步映射允许我们异步迭代结果,允许我们通过提供 callback
和新的 result
作为第二个参数来修改 result
。 Final 函数是我们的最终回调,它提供了沿途发生的任何 err
和我们的新数组 output
.