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

电商API用户创建POST请求返回200但未生成记录求助

问题排查:POST创建用户返回200但无数据库记录

核心问题分析

从提供的代码来看,主要存在以下几个直接导致问题的原因:

1. 控制器未实现post_register处理逻辑

你导出了post_register函数,但提供的控制器代码里没有这个函数的具体实现。这意味着当POST请求到达时,服务器只是默认返回200 OK,根本没有调用UserProfile.post_register执行创建用户的核心逻辑。

修复建议:
补充控制器的post_register函数,参考put_update的写法实现:

const post_register = (req, res, next) => {
  const {
    first_name,
    last_name,
    birth_date,
    gender,
    home_address,
    country_of_residence,
    phone,
    pword,
    username
  } = req.body;
  
  UserProfile.post_register(
    first_name,
    last_name,
    birth_date,
    gender,
    home_address,
    country_of_residence,
    phone,
    pword,
    username
  )
  .then((response) => {
    utils.writeJson(res, response);
  })
  .catch((error) => {
    // 捕获错误并返回对应状态码,避免默认返回200
    utils.writeJson(res, { error: error.message }, 400);
  });
};

2. 服务层post_register的无反馈分支

当检测到用户名已存在时,函数直接return,没有返回拒绝的Promise,也没有抛出错误。这会导致控制器的then分支被触发,返回空响应(或200),但实际上用户并未创建成功。

修复建议:
在用户名已存在时,返回拒绝的Promise,让控制器捕获并返回错误响应:

const post_register = async (
  first_name,
  last_name,
  birth_date,
  gender,
  home_address,
  country_of_residence,
  phone,
  pword,
  username
) => {
  const checkUser = await findByUsername(username);
  if (checkUser) {
    console.log(`${username} already exists`);
    // 返回拒绝的Promise,告知控制器用户已存在
    return Promise.reject(new Error(`${username} 已存在`));
  }

  // 后续密码加密、数据库插入逻辑保持不变...
};

3. 数据库操作的错误处理冗余

服务层中pool.query的回调里,既rej(error)又throw error是冗余的——throw error在回调内不会被外部捕获,反而可能引发未处理异常。建议移除throw error:

if (error) {
  rej(error);
  // 移除该行:throw error;
}

4. 顺带提示:更新接口的字段拼写错误

put_update的SQL语句中,字段名写错:home_adress应该是home_address,这会导致更新用户时地址字段无法正确修改,建议修正:

"UPDATE users SET first_name = $1, last_name = $2, birth_date =$3, gender =$4, home_address=$5, country_of_residence = $6, phone = $7, pword = $8, username = $9 WHERE ID = $10"

验证步骤

  1. 补充控制器的post_register实现后,重启服务
  2. 在Postman中发送POST请求,查看控制台是否打印results.rows(创建成功时会输出新用户数据)
  3. 测试重复用户名的场景,检查是否返回错误响应而非200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:25:01