Node.js使用IP作为主机时接口无法获取数据求助
问题解决方案
1. 端口冲突导致请求挂起
你的MySQL数据库已经占用了3306端口,同时将Node.js服务也监听在3306端口,这会造成端口冲突,服务器无法正常处理HTTP请求,导致浏览器一直处于加载状态。
解决步骤:
- 修改
app.listen的端口为未被占用的端口(比如3000或8080):app.listen(3000,()=>{ console.log('服务器已启动,监听3000端口'); // 原有的测试查询代码可保留在此处 }) - 之后访问接口的地址改为:
http://xxx.xxx.xxx.xxx:3000/api/get
2. 接口缺少错误处理逻辑
当前的/api/get接口中,若数据库查询出现错误(如SQL语法错误、数据库连接异常等),没有对应的错误处理逻辑,会导致请求一直挂起,无法得到响应。
解决步骤:
- 在
db.query的回调函数中添加错误处理,及时返回错误响应:
注:用app.get("/api/get",(req,res)=>{ let sqlInsert = "SELECT el.examID, el.categoryID, el.SubCategoryID, el.Question,A.A, A.B, A.C, A.D, A.Answer "; sqlInsert += " FROM ExamList el "; sqlInsert += " inner join ExamAnswer A on A.ExamID = el.ExamID "; sqlInsert += " inner join ExamSubCategory es on es.ID = el.SubCategoryID "; sqlInsert += " where el.CategoryID = 1 and es.ID = 1"; db.query(sqlInsert,(err, result)=>{ // 先处理错误情况 if(err) { console.error('数据库查询出错:', err); return res.status(500).json({error: '数据库查询失败,请检查日志'}); } // 查询成功时返回结果 res.json(result); }) });res.json()替代res.send()更适合返回JSON格式的数据,符合API接口的规范。
3. HTTPS访问报错的问题
你的Node.js服务默认是HTTP服务,没有配置SSL证书,直接用https://访问会触发ERR_SSL_PROTOCOL_ERROR错误,这是正常现象。
解决步骤:
- 开发测试阶段直接使用
http://访问接口即可; - 如果生产环境需要HTTPS访问,需配置SSL证书(例如使用Let's Encrypt免费证书),并修改Node.js服务的启动代码以支持HTTPS。
内容的提问来源于stack exchange,提问作者renge
相关产品推荐
相关产品推荐

