关于Express中app.get()及前后端交互逻辑的疑问
关于Express app.get()的疑问解答
你的理解基本正确,下面详细拆解整个流程和需要注意的细节:
点击按钮后的前端行为:
点击consult-button按钮时,触发的事件会通过window.location.href = '/consulting'让浏览器向你的Express服务器发送GET请求,目标路径就是/consulting。后端app.get()的作用:
你在app.js里写的app.get('/consulting', (req, res) => {...})是Express的路由配置,它的核心作用就是监听所有发往/consulting路径的GET请求,一旦匹配到对应的请求,就会执行括号里的回调函数。回调函数的执行流程:
回调里会依次创建PostgreSQL客户端、建立数据库连接、执行查询语句;查询完成后,如果没有错误,就会把查询结果的rows数据通过res.send()返回给浏览器,最后关闭数据库连接。
几个需要注意的细节
- 错误处理不完善:当前代码里如果查询出错,只在控制台打印错误,但没有给前端返回错误响应,也没有关闭数据库连接,建议补充完善:
client.query('SELECT * FROM questionaire', (err, result) => { if (err) { console.log(err); res.status(500).send('数据库查询失败'); // 向前端返回错误状态和信息 client.end(); // 出错也要关闭数据库连接 return; } res.send(result.rows); client.end(); });
- 页面跳转的显示问题:你现在用
window.location.href跳转,浏览器收到后端返回的JSON数据后,会直接把JSON内容显示在新页面里。如果想把数据渲染到HTML页面中,有两种常见方式:- 改用AJAX/fetch请求:不跳转页面,异步获取数据后在当前页面渲染;
- 使用模板引擎(比如EJS、Pug):后端把数据传给模板,渲染成完整的HTML页面再返回给浏览器。
内容的提问来源于stack exchange,提问作者ouma
相关产品推荐
相关产品推荐

