【问题标题】:Server data coming through as [Object object] on client服务器数据作为客户端上的 [Object object] 传入
【发布时间】:2022-01-08 14:19:14
【问题描述】:

我正在尝试显示从服务器发送的数据,但它没有正确通过(请参阅上图左下角的 [Object object])。这是客户端代码:

        <div class="card-body">
          <h5 class="card-title"><%= event.event_name %></h5>
          <p class="card-text"><%= event.description %></p>
          <p class="card-text"><%= eventData %></p>
        </div>

服务器正在以以下格式发送数组中的数据:

 const eventData = [{
      _id: 'objectId_for_the_event',
      guests: [
          'guestId1',
          'guestId2', 
          'guestId3',
          'guestId4',
          'guestId5'
       ],
       totalGuests: 5,
       attendedGuests: 0
      }
     ]

想要将来自 totalGuests 和 AttendGuests 的值显示在客户端上。这是我在服务器中的函数(它很长而且有点令人困惑,但最后一行中的 console.log 运行良好,因此变量正在运行):

module.exports.showEvent = async (req, res) => {
    const event = await Event.findById(req.params.id).populate('artist');
    const { guest_id } = req.cookies;
    let totalGuests = 0;
    let attendedGuests = 0;
    const eventData = await Event.aggregate([
        {
            "$match": {
                "_id": objectId(req.params.id)
            }
        },
        {
            $project: {
                _id: 1,
                name: 1,
                guests: 1,
                totalGuests: { $cond: { if: { $isArray: "$guests" }, then: { $size: "$guests" }, else: "NA" } },
                attendedGuests: {
                    $size: {
                        $filter: {
                            input: "$guests",
                            as: "guest",
                            cond: {
                                $and: [{
                                    $eq: ["$$guest.attended", "Y"]
                                }]
                            }
                        }
                    }
                }
            }
        }
    ])
    if (eventData && Array.isArray(eventData) && eventData.length > 0) {
        totalGuests = eventData[0].totalGuests;
        attendedGuests = eventData[0].attendedGuests;
    }
    if (!event) {
        req.flash('error', 'Cannot find that Event');
        return res.redirect('/events');
    }
    res.render('events/show', { event, eventData });
    console.log(totalGuests, attendedGuests);
};

如何将这两个变量从数组中取出并放到客户端上?

【问题讨论】:

  • 在发送变量之前,您需要先在变量上使用JSON.stringify()
  • 就是这样!谢谢@Capt171-除非您想要功劳,否则将在答案中单独添加?常量参加者 = JSON.stringify(attendedGuests);在函数中和客户端上的

  • 将添加答案:)

标签: javascript node.js mongodb mongoose client-server


【解决方案1】:

您需要在发送值之前使用JSON.stringify() 对值进行字符串化。应该是这样的:

JSON.stringify(attendedGuests); 

【讨论】:

    【解决方案2】:

    尝试传递数组中的第一个对象而不是数组本身:

    res.render('events/show', { event, eventData[0] });.

    您也可以像const [{totalGuests, attendedGuests}] = eventData; 一样对其进行解构,然后将这两个变量发送为totalGuestsattendedGuests

    【讨论】:

    • 尝试了第一种方法,一旦我添加了[0],语法就关闭了。我在该行下方的所有代码都会出错。此外, eventData 已经被声明,但包含了你的想法,只是在他们自己的字符串化变量中声明了 totalGuests 和 AttendGuests。单独发布答案,但感谢@yaezah 的反馈!
    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多