我正在构建一个 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,但结果仍然相同
抱歉我的鲁莽,问题似乎是在 dart 文件中,在这一行中
'factories': widget.factory.factoryId,
它应该是 factoryId
因为我已经在这里声明了 const { phoneNumber, factoryId } = req.body;