0
点赞
收藏
分享

微信扫一扫

#私藏项目实操分享#在mongoose中进行populate联合查询导致模板无法渲染——解决报错信息之:SyntaxError: Unexpected token R in JSON at

报错信息

#私藏项目实操分享#在mongoose中进行populate联合查询导致模板无法渲染——解决报错信息之:SyntaxError: Unexpected token R in JSON at_mongoDB

出错代码

let articles = await Article.find().populate('author');
res.render('admin/article', { articles });

出错原因

      在mongoose中使用​​populate​​方法实现集合关联时,导致模板引擎无法渲染,这是因为当集合联合查询和渲染页面模板同时进行会导致两者冲突,从而导致无法渲染页面,例如我们把上面的代码改成如下这样:

let articles = await Article.find().populate('author');
res.send('ok'); // 服务端能够给客户端响应 ok 所以模板渲染与联合查询确实存在冲突

解决方法

使用lean()方法

let articles = await Article.find().populate('author').lean();
res.render('admin/article', { articles });

      lean()方法:是告诉mongoose返回的是普通对象,而不是mongoose文档对象,方法内部先用JSON.stringify()这个方法将文档对象转换为字符串,将其他的属性格式全部去掉,然后只留下需要的数据字符串~

使用stringfy()和 parse()方法

      和上面的方法实质上是一样的.

let articles = await Article.find().populate('author');
let str = JSON.stringify(result);
let json = JSON.parse(str);
res.render('admin/article', { json });

而在继续进行分页功能的时候,我们采用JSON方法

      实现分页功能的时候,我们采用了​​mongoose-sex-page​​第三方模块进行分页,然后我们将代码改成:

let temp = await pagination(Article).find({})
.page(page)
.size(2)
.display(2).populate('author')
.exec();
let str = JSON.stringify(temp);
let articles = JSON.parse(str);
res.render('admin/article', { articles });

问题就解决啦!


参考博客https://blog.csdn.net/qq_49002903/article/details/112541719


举报

相关推荐

0 条评论