Javascript 迭代对象时节点连接问题
我有下面的nodejs代码。其中,commentedUser.user\u id.image循环中的变量超过了使用userImage变量多次写入的循环。我用输出详细解释了Javascript 迭代对象时节点连接问题,javascript,node.js,Javascript,Node.js,我有下面的nodejs代码。其中,commentedUser.user\u id.image循环中的变量超过了使用userImage变量多次写入的循环。我用输出详细解释了 for(var commentedUser of commentData){ var userImage = (commentedUser.user_id.image=="")?"default.png":commentedUser.user_id.image; userImage = config.baseU
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
}
]
}
在输出中,您可以看到图像url重复,这就是问题所在。我不知道为什么会这样。我努力了很长一段时间都没有取得成功
注意:commentData是一个对象数组
我同意Bergi的上述评论。以不同的方式陈述:假设您从数据库(sql、mongodb等)获得这些对象;您正在查看的两条注释可能都链接到同一个用户id。因此,即使您正在循环(例如)50条不同的注释,其中一些注释可能会在同一
用户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;
}
更一般地说,您遇到这一事实可能表明您在错误的位置执行此操作-这可能发生在应用程序链的更上层,可能发生在用户模型中。您的代码将“基本URL”和路径片段
/upload/User
添加到图像URL的前面,但是看起来源URL已经包含了基本部分。commentedUser.user\u id.image
的原始值是什么?还有什么是config.baseUrl
?@Pointy还没有包括在内。您可以看到,首先我使用图像名称,然后我将其与baseUrl连接。@BergicommentedUser.user\u id.image=blank(空字符串)
和config.baseUrl=common url
的原始值images@Sadikhasan如果您console.log(userImage)
在循环体的末尾,它的值与最终的JSON.stringify
中的值不同,并且您在第一个日志中得到了预期值,在第二个日志中得到了错误值,这非常有力地支持了我的假设,。user
属性引用了完全相同的对象。太棒了!!!非常感谢你。我从同一个用户那里得到了两个对象,这就是它产生问题的原因。