React+Node.js项目Cannot destructure property 'err'报错如何解决
错误原因
你遇到的报错是混用Mongoose回调写法和async/await语法导致的,核心有两个问题:
- 当你给
Users.findOne()传入回调函数时,Mongoose不会返回Promise实例,await操作拿到的结果为undefined。同时你在回调函数内部写的return语句只会返回给回调本身,无法穿透到外层的acceptTestimonial/rejectTestimonial函数,导致这两个控制器最终没有返回任何值,路由层对undefined做解构赋值就触发了对应的类型错误。 - 额外的参数传递问题:REJECT分支的路由里你传的是完整的
req.user对象,但是rejectTestimonial初始定义的形参是userId,查询逻辑需要对应调整。
修复方案
把所有Mongoose操作改为纯async/await写法,去掉回调函数即可,修正后的代码如下:
修正后的acceptTestimonial
const acceptTestimonial = async (testimonialId, userId) => { try { const creator = await Users.findOne({ _id: userId }); if (!creator) return { err: "用户不存在", status: 404, data: null }; creator.testimonials = creator.testimonials.map((testimonial) => { if (testimonial._id == testimonialId) { testimonial.status = 'PUBLISHED'; } return testimonial; }); await creator.save(); return { err: null, status: 200, data: creator }; } catch (err) { return { err: err.toString(), status: 500, data: null }; } };
修正后的rejectTestimonial
const rejectTestimonial = async (testimonialId, user) => { try { // 调整为从传入的user对象取_id查询 const creator = await Users.findOne({ _id: user._id }); if (!creator) return { err: 'Creator not found!', status: 404, data: null }; creator.testimonials = creator.testimonials.map((testimonial) => { if (testimonial._id === testimonialId) { testimonial.status = 'REJECTED'; } return testimonial; }); await creator.save(); return { err: null, status: 200, data: creator }; } catch (err) { return { err: err.toString(), status: 500, data: null }; } };
内容的提问来源于stack exchange,提问作者vaibhav deep
相关产品推荐
相关产品推荐

