Mongoose findOne查询无响应问题求助(REST API+ROBO 3T)
问题:GET请求查询特定文章时服务器无返回内容
开发REST API时,通过本地ROBO 3T数据库获取数据,使用mongoose的findMany()方法能正常返回所有文章数据,但调用findOne()查询特定文章时,明明数据库中存在对应数据,服务器却未返回任何内容。
问题代码
app.route('/articles/:specificArticleTitle') // req.params.specificArticleTitle ----> 对应请求传入的文章标题 .get((req, res) => { Article.findOne({ title: 'req.params.specificArticleTitle' }).then((contentReturned) => { res.send(contentReturned); }).catch((err) => { res.send(err); }); });
问题原因
代码中把req.params.specificArticleTitle用单引号包裹成了字符串字面量,这意味着你在查询标题等于固定字符串'req.params.specificArticleTitle'的文档,而不是使用请求参数中传入的实际标题值。数据库中不存在这个标题的文档,所以findOne()返回null,服务器也就没有内容返回。
解决方案
去掉单引号,直接引用req.params.specificArticleTitle变量作为查询条件的值,同时可以增加未找到数据的判断,让接口更健壮:
app.route('/articles/:specificArticleTitle') .get((req, res) => { Article.findOne({ title: req.params.specificArticleTitle }).then((contentReturned) => { if (contentReturned) { res.send(contentReturned); } else { res.status(404).send('未找到对应文章'); } }).catch((err) => { res.status(500).send(err); }); });
相关场景说明
- 数据库中存在标题为"REST"的文章文档
- Postman请求路径为
/articles/REST,原代码的错误查询条件导致无法匹配到对应数据
内容的提问来源于stack exchange,提问作者Badal Kumar
相关产品推荐
相关产品推荐

