Postman调用GET接口返回空数组,数据库连接后仍提示无产品问题排查
问题排查方案
1. 先确认MongoDB连接状态
你的代码里mongoose.connect没有错误监听,连接失败时不会有任何提示,可能数据库根本没连上。修改连接代码,加上错误和成功回调:
mongoose.connect("mongodb://localhost:27017/SearchApp") .then(() => console.log("数据库连接成功")) .catch(err => console.error("数据库连接失败:", err));
启动服务后看控制台有没有连接成功的提示,如果失败,检查MongoDB服务是否启动、端口是否正确、数据库名称是否拼写错误。
2. 检查MongoDB集合与模型的对应关系
Mongoose默认会把模型名称转成小写复数形式作为集合名。你定义的模型是mongoose.model("Ads", adSch),所以Mongoose会自动去查询searchapp数据库里的ads集合(注意小写+复数)。
- 打开MongoDB Compass或者用命令行执行
use SearchApp,再输入show collections,看是否存在ads集合,而不是Ads或者其他名称。 - 如果你的集合确实叫
Ads,需要在定义模型时显式指定集合名:
module.exports = mongoose.model("Ads", adSch, "Ads"); // 第三个参数指定集合名
3. 确认集合内是否有数据
连接成功后,检查目标集合里是否有文档数据:
- 用命令行执行
db.ads.find(),看是否能返回数据。 - 如果集合是空的,接口返回"No Product Found"是正常的,先往集合里插入测试数据再测试。
4. 增加查询的错误捕获
你的await Ad.find()没有错误处理,如果查询过程中出错(比如权限问题、集合不存在),会直接抛出错误但没被捕获,可能导致请求异常。修改接口代码:
app.get("/", async (req, resp) => { try { let ads = await Ad.find(); if(ads.length>0){ resp.send(ads); }else{ resp.send("No Product Found"); } } catch (err) { resp.status(500).send("查询出错: " + err.message); } });
这样如果查询有错误,会返回具体的错误信息,方便排查。
5. 检查端口与请求地址
确认Postman请求的地址是http://localhost:3000/,和你的服务监听端口一致,没有写错端口号或者路径。
内容的提问来源于stack exchange,提问作者ashrth
相关产品推荐
相关产品推荐

