Node.js前端求助:如何将MongoDB的ObjectID转换为字符串以获取数据
解决MongoDB ObjectID转字符串的问题
后端处理(推荐)
如果用Mongoose操作MongoDB,在定义Schema时添加配置,自动将_id转换为字符串:
const productSchema = new mongoose.Schema({ // 你的字段定义 }, { toJSON: { transform: function(doc, ret) { ret.id = ret._id.toString(); delete ret._id; delete ret.__v; } } });
这样接口返回的数据里,id就是字符串类型,前端无需额外处理。
前端处理(临时方案)
如果后端无法修改,在前端获取数据后手动转换_id为字符串:
修改你的useEffect代码:
useEffect(() => { const getProducts = async () => { setLoading(true); const response = await fetch(`http://localhost:8000/api/products/${id}`); const resData = await response.json(); // 将ObjectID转换为字符串 const formattedData = Array.isArray(resData) ? resData.map(item => ({...item, id: item._id.toString()})) : {...resData, id: resData._id.toString()}; setData(formattedData); setLoading(false); } getProducts(); }, [id]); // 加入id依赖,避免闭包过期问题
另外注意你的useState初始值是数组[],如果接口返回单个产品对象,建议把初始值改成null或{},避免类型混乱:
const [data, setData] = useState(null);
内容的提问来源于stack exchange,提问作者user15945543
相关产品推荐
相关产品推荐

