循环遍历req.body个元素,只有1个元素时跳转到字符串

Loop through req.body element, jumps into string when its only 1 Element

我的 req.body.email 有问题。 只要有最少2个emails我的obj就是这样打印出来的:

{
  users: [
    { email: 'sadda@gmail.com', role: 'read' },
    { email: 'dsads@web.de', role: 'Admin' }
  ]
}

所以这里的一切都是正确的。但是只要我只有 1 email 它就会遍历各个字母,使 obj 看起来像这样:

{
  users: [
    { email: 't', role: 'read' },
    { email: 'e', role: 'read' },
    { email: 's', role: 'read' },
    { email: 't', role: 'read' }
  ]
}

这是我的代码:

router.post('/test/:proID', async (req, res) => {
    const projectID = parseInt(req.params['proID'], 10) || 0;
    var obj = {};
    obj.users = [];
    for (let i = 0; i < req.body.email.length; i++) {
      obj.users[i] = { email: req.body.email[i], role: req.body.right[i]
      };
    console.log(req.body.email.length);
    console.log(req.body.email);
    console.log(obj);

我该如何解决这个问题?此外,当我只有 1 封电子邮件时,我的 req.body.email.length 显示字母数,而不是对象的长度。 所以我假设当只有 1 封电子邮件时,它只是一个字符串,如果多个我的 req.body.email 是一个对象?

我怎样才能有效地处理这个问题?

您的响应正文中 email 字段的类型似乎取决于地址的数量。如果只有一个地址,则为string,如果有多个地址,则为Array。如果您不能将 API 更改为始终 return 和 Array,您可以检查客户端上的数据类型:

if (Array.isArray(req.body.email)) {
  // ...
}
else {
  // ...
}