POST 请求中的服务器 returns 404

Server returns 404 in POST request

我有一个使用 React 和 Strapi headless CMS(使用 nodejs)构建的项目。使用 Strapi 处理的后端驻留在端口 443 中。当我使用 http://site:443 向后端中的任何 url 发送 GET 请求时,我得到一个有效的响应,但是 POST 请求总是returns 错误 404。

我使用外部工具 https://reqbin.com/ 对其进行了测试并得到了相同的结果。

有趣的是,即使我收到 404 响应,路由正在处理和执行,但仍返回 404 响应。

为什么会这样?

提前致谢

这是到达这条路线时的代码:

 /**
   * Create a/an orders record.
   *
   * @return {Object}
   */

create: async (ctx) => {

let params = ctx.request.body;


if (params.Sum) { // only if we got a good POST response

  // check secret code
  let a = params.UniqueID;
  var res = a.substr(a.length - 12, a.length);
  if (res !== 'secret') {
    ctx.throw(500, 'SECURITY BLOCK', { expose: true });
    return null;
  }
  var username = a.substr(0, a.length - 12);

  // create validity
  var date = new Date();
  if (params.Sum === '250') { // one month membership
    date.setTime( date.getTime() + 31 * 86400000 );
  } else if (params.Sum === '390') { // one month membership
    date.setTime( date.getTime() + 180 * 86400000 );
  }

  // create order in database
  let today = new Date();
  // extract username
  var n = params.CustomerName.indexOf("_");
  var name = params.CustomerName.substr(0, n);
  var instId = params.CustomerName.substr(n+1, params.CustomerName.length);
  const order = await strapi.services.orders.add({
    userId: username, 
    username: name,
    institutionId: instId,
    sum: params.Sum,
    transactionDate: today,
    validity: date,
    cardNum: params.CardNum,
    cardName:params.CardName,
  });

    let axiosArr = {
        institutions: [{_id: instId}],
        validity: date,
        secret: 'secret'
    }
    axios.put(apiUrl+'/users/'+username, axiosArr).then(() => {return order})

  // return order

大部分代码与问题无关,我在想可能响应是 404 的原因是因为我没有立即返回订单对象,而是在 axios.put 之后才返回? 不幸的是我现在不能测试它

我不熟悉 strapi,但对我来说它听起来不像是身份验证问题。您确定这些路由设置为接受 POST 请求而不仅仅是 GET 请求吗?如果用户缺少访问资源所需的权限,return 404s 是很常见的,不让该人知道该资源存在但没有任何示例代码我无法确定您的情况。你能 link 更多代码吗?

如果路由执行良好但returns 404,那是因为响应主体为空。

在您的代码中,您注释了 return order

在您的代码中添加类似 ctx.send({order}) 的内容或取消注释您的 return

您将不再有 404