factory._id无法使用node.js和MongoDB添加到用户表中

问题描述 投票:0回答:1

我正在构建一个 flutter 应用程序,我可以在其中添加我想要邀请的电话号码到我的数据库中。在数据库中添加电话号码后,它还会添加分配给的工厂 ID。例如,如果我单击工厂一中的添加按钮,则应该返回工厂的objectId。但问题是,添加用户时不会分配任何工厂 ID,即使它与 objectId 相同。

这是我的控制器片段:

exports.inviteEngineer = async (req, res) => {
    const { phoneNumber, factoryId } = req.body;
    try {
      let user = await User.findOne({ phoneNumber });
      if (!user) {
        user = new User({ phoneNumber, invited: true });
      } else {
        user.invited = true;
      }
  
      let factory = await Factory.find({_id: factoryId});
      if (!factory) {
        return res.status(404).json({ message: 'Factory not found'});
      }

      if (!user.factories.includes(factory._id)) {
        user.factories.push(factory._id);
      }
  
      if (!factory.engineers.includes(user._id)) {
        factory.engineers.push(user._id);
      }
  
      await user.save();
      await factory.save();

      res.status(200).json({ message: 'Engineer invited successfully' });
    } catch (error) {
      res.status(500).json({ error: error.message });
    }
  };

这是我的路线:

router.post('/register', registerUser);
router.post('/verify-otp', verifyOtp);
router.post('/invite-engineer', protect, inviteEngineer);
router.get('/protected', protect, (req, res) => {
  res.status(200).json({ message: 'This is a protected route' });
});

我厂型号:

  Factory(
    factoryId: '668637b5a5d082f6188137d4',
    factoryName: "Factory 4",
    status: "⚠️ XYZ6666 IS UNREACHABLE!",
    steamPressure: 0.0,
    steamFlow: 0.0,
    waterLevel: 0.0,
    powerFrequency: 0.0,
    datetime: "--:--",
    engineers: [
      Engineer(name: "Noname", phone: "+6014123458"),
    ],
    threshold: Threshold(
      steamPressure: 20,
      steamFlow: 20,
      waterLevel: 20,
      powerFrequency: 20,
    ),
  ),

这是我的 dart 文件片段:

  Future<void> addNewEngineer() async {
    String name = nameController.text.trim();
    String phone = phoneNumberController.text.trim();

    if (name.isNotEmpty && phone.isNotEmpty) {
      final prefs = await SharedPreferences.getInstance();
      final String? token = prefs.getString('token');

      if (token != null) {
        final response = await http.post(
          Uri.parse('my-api'), //i have my actual api here
          headers: <String, String>{
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer $token',
          },
          body: jsonEncode(<String, String>{
            'phoneNumber': phone,
            'factories': widget.factory.factoryId,
          }),
        );

        if (response.statusCode == 200) {
          setState(() {
            widget.factory.engineers.add(Engineer(name: name, phone: phone));
            nameController.clear();
            phoneNumberController.clear();
          });
          Navigator.of(context).pop();
        } else {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(
                content: Text('Failed to add user: ${response.statusCode}')),
          );
        }
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          const SnackBar(content: Text('Authentication token not found')),
        );
      }
    } else {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text('Please enter all fields')),
      );
    }
  }

MongoDB 截图:

在此输入图片描述

我知道即使未检测到工厂 ID 也可以添加用户的原因是因为该 dart 文件中的主体部分。

我尝试将 id 从字符串更改为对象 id,但结果仍然相同

node.js flutter mongodb express
1个回答
0
投票

抱歉我的鲁莽,问题似乎是在 dart 文件中,在这一行中

'factories': widget.factory.factoryId,
它应该是
factoryId
因为我已经在这里声明了
const { phoneNumber, factoryId } = req.body;

© www.soinside.com 2019 - 2024. All rights reserved.