mongoose(mongodb)和Sequelize(mysql)查询数据库后添加新属性,前端拿不到新属性问题
mongoose(mongodb)和Sequelize(mysql)查询数据库后添加新属性,前端拿不到新属性问题
最近在着手做一个koa2商城的时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题,
然后测试了一下Sequelize(mysql),发现也有同样的问题存在。此时着手干!
mongoose问题展示:
1 router.get('/order_show', async (ctx, next) => { 2 const id = ctx.query.id 3 try { 4 let doc = await Order.findOne({ _id: id }).populate(['buyid', 'address']) 5 doc.goods.forEach(async (item, index) => { 6 const goodsdata = await Goods.findOne({ id: item.id }) 7 doc.goods[index].list = goodsdata 8 }) 9 if (!doc) { 10 await ctx.render('order/order_show', { orderInfo: null }) 11 return false 12 } 13 await ctx.render('order/order_show', { orderInfo: doc }) 14 } catch (err) { 15 console.log(err) 16 await ctx.render('order/order_show', { orderInfo: null }) 17 } 18 19 })
问题:以上案例,发现访问以上域名的时候,前台模板并没有list这个属性。
经过查询mongoose 文档,发现通过mongoose查询的结果为Document文档类型而并非对象类型,因此设置list属性并未生效,并没有对doc
进行更改。
mongoose(mongodb)解决方法:
我们只需要将doc对象转换为Object
对象即可,使用mongoose
自带的Document.prototype.toObject()
方法,或者使用JSON.stringify()
方法,将doc
转换为Object
对象。修改代码如下:
1 router.get('/order_show', async (ctx, next) => { 2 const id = ctx.query.id 3 try { 4 let doc = await Order.findOne({ _id: id }).populate(['buyid', 'address']) 5 doc = doc.toObject() // 修改这里就可以,将doc
转换为Object
对象 6 doc.goods.forEach(async (item, index) => { 7 const goodsdata = await Goods.findOne({ id: item.id }) 8 doc.goods[index].list = goodsdata 9 }) 10 if (!doc) { 11 await ctx.render('order/order_show', { orderInfo: null }) 12 return false 13 } 14 await ctx.render('order/order_show', { orderInfo: doc }) 15 } catch (err) { 16 console.log(err) 17 await ctx.render('order/order_show', { orderInfo: null }) 18 } 19 20 })
Sequelize问题展示:
1 for (let i = 0; i < orderList.length; i++) { 2 let userInfo = await wdUser.findById(orderList[i].user_id) 3 orderList[i].user_info = userInfo 4 }
问题:以上案例,user_info这个属性并没有添加上去。
Sequelize(mysql)解决方法:
1 for (let i = 0; i < orderList.length; i++) { 2 let userInfo = await wdUser.findById(orderList[i].user_id) 3 orderList[i].setDataValue( 'user_info', userInfo ) 4 }
以上个人见解