我有以下nodejs代码。其中,将 commentedUser.user_id.image 变量内部循环重写为与 userImage 变量多次循环写入。我用输出详细解释了。
for(var commentedUser of commentData){
var userImage = (commentedUser.user_id.image=="")?"default.png":commentedUser.user_id.image;
userImage = config.baseUrl+("upload/user/")+userImage;
commentedUser.user_id.image = userImage;
}
successMessage.message = "Feed comment found successfully";
successMessage.data = commentData;
return response.send(JSON.stringify(successMessage));
输出
{
"status": "success",
"message": "successfully",
"data": [{
"_id": "5c18d8403764675cccfb4de1",
"feed_id": "5b9a19df682d9223606d3372",
"comment": "Feed test comment",
"user_id": {
"_id": "5c18c20e7f936248e2b1b724",
"role": "user",
"image": "http://192.168.2.21:8046/upload/user/http://192.168.2.21:8046/upload/user/default.png"
},
"created_at": "2018-12-18T11:21:36.388Z",
"__v": 0
},
{
"_id": "5c19ccbad517491cfc1002ee",
"feed_id": "5b9a19df682d9223606d3372",
"comment": "Feed test comment",
"user_id": {
"_id": "5c18c20e7f936248e2b1b724",
"role": "user",
"image": "http://192.168.2.21:8046/upload/user/http://192.168.2.21:8046/upload/user/default.png"
},
"created_at": "2018-12-19T04:44:42.045Z",
"__v": 0
}
]
}
在输出中,您可以看到重复的图像网址。我不知道为什么会这样。我试了很久没有成功。
注意: commentData 是一个对象数组。
答案 0 :(得分:0)
我同意贝尔吉的上述评论。换一种说法:假设您从数据库(sql,mongodb等)中获得了这些对象;您正在查看的两个注释可能都链接到相同的用户ID 。因此,即使您遍历(示例)50个不同的注释,这些注释中的某些注释也可能在同一user_id
对象上运行代码多次。
对您来说,一个简单的解决方案是确保您不对已经标准化的URL进行标准化,如下所示:
for(var commentedUser of commentData) {
var userImage = (commentedUser.user_id.image=="")?"default.png":commentedUser.user_id.image;
if (!userImage.startsWith("http")) {
userImage = config.baseUrl+("upload/user/")+userImage;
}
commentedUser.user_id.image = userImage;
}
更一般地说,您可能会遇到错误,这可能是您在错误的位置执行此操作的信号-它可能应该在应用程序链的更深处发生,也许是在用户模型中。