You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express/Node+PostgreSQL环境下Postman无法获取POST请求响应

问题原因与解决方案

嘿,我立刻发现了你代码里的关键问题,这也是导致Postman超时、无法打印results的根本原因:

1. 回调函数的位置错误

你在调用pool.query时,错误地提前闭合了函数括号,还加了个多余的逗号,导致回调函数根本没有被作为参数传入pool.query中。原代码里的这部分:

pool.query(`INSERT INTO events (...) VALUES (...)`), (error, results) => { 
  // 回调逻辑
}

实际上是把pool.query的调用和一个独立的箭头函数分开了,数据库操作完成后根本不会触发这个回调,自然也就不会执行response.status(201).send(...),Postman就会一直等待响应直到超时,results也永远不会被打印。

2. 修复后的代码(同时解决SQL注入风险)

另外还要提醒你:直接用字符串拼接用户输入到SQL语句里存在严重的SQL注入风险,必须使用pg包支持的参数化查询来避免这个问题。下面是修复后的完整代码:

const createEvent = (request, response) => { 
  console.log(request.body); 
  const { type, location, current_attendees, total_attendees, details, event_date, has_car, has_food, cover_charge, contact_email } = request.body; 
  
  // 使用参数化查询,用$1、$2...占位符代替直接拼接
  const query = `
    INSERT INTO events (type, location, current_attendees, total_attendees, details, event_date, has_car, has_food, cover_charge, contact_email)
    VALUES ($1, $2, $3, $4, $5, TO_DATE($6, 'YYYY-MM-DD'), $7, $8, $9, $10)
  `;
  const values = [type, location, current_attendees, total_attendees, details, event_date, has_car, has_food, cover_charge, contact_email];

  // 正确传入回调函数作为pool.query的第三个参数
  pool.query(query, values, (error, results) => { 
    if (error) { 
      // 建议不要直接throw error,避免服务器崩溃,返回错误响应给客户端
      console.error(error);
      return response.status(500).send('Failed to create event');
    } 
    console.log(results); 
    response.status(201).send('Event created'); 
  });
}

3. 额外优化建议

  • 不要直接throw error,在Express中这样会导致服务器崩溃,应该捕获错误并返回合适的HTTP错误响应给客户端。
  • 可以考虑使用async/await语法替代回调,让代码更易读:
const createEvent = async (request, response) => { 
  try {
    console.log(request.body); 
    const { type, location, current_attendees, total_attendees, details, event_date, has_car, has_food, cover_charge, contact_email } = request.body; 
    const query = `
      INSERT INTO events (type, location, current_attendees, total_attendees, details, event_date, has_car, has_food, cover_charge, contact_email)
      VALUES ($1, $2, $3, $4, $5, TO_DATE($6, 'YYYY-MM-DD'), $7, $8, $9, $10)
    `;
    const values = [type, location, current_attendees, total_attendees, details, event_date, has_car, has_food, cover_charge, contact_email];
    const results = await pool.query(query, values);
    console.log(results); 
    response.status(201).send('Event created'); 
  } catch (error) {
    console.error(error);
    response.status(500).send('Failed to create event');
  }
}

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:59:06