Strapi返回404,仅在部署到Heroku时用于自定义路线

jm81lzqq  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(198)

我在Strapi v4中创建了一个名为“user-screens”的自定义路由。在本地,我用FE代码点击了它,它返回了一些预期的数据。但是,当我将其部署到Heroku并尝试使用部署到Heroku的代码访问端点时,它返回了404。我跟踪了Heroku日志,可以看到端点在服务器端被点击。但是日志除了返回一个404之外没有给予任何信息。
我正在执行其他非自定义路由api调用,这些都在Heroku上运行良好。我能够授权、保存令牌,并使用JWT令牌和所有其他端点返回数据来命中api。这只发生在部署到Heroku时的自定义路由上。我已经设置了具有适当来源的cors,而且我想知道我是否需要在自定义路由中向我的策略和中间件添加一些东西。我已经验证了权限,并验证了Strapi管理中经过身份验证的用户可以访问该路由。
这是我的路线:

module.exports = {
  routes: [
    {
      method: "GET",
      path: "/user-screens",
      handler: "user-screens.getUserScreens",
      config: {
        policies: [],
        middlewares: [],
      },
    },
  ],
};

和我的控制器:

"use strict";

/**
 * A set of functions called "actions" for `user-screens`
 */

module.exports = {
  getUserScreens: async (ctx) => {
    const user = ctx.state.user;

    if (!user) {
      return ctx.badRequest(null, [
        { messages: [{ id: "No authorization header was found" }] },
      ]);
    }

    strapi.entityService
      .findMany("api::screen.screen", {
        owner: user.id,
        populate: ["image"],
      })
      .then((result) => {
        ctx.send(result);
      });
  },
};
unhi4e5o

unhi4e5o1#

对于任何面临这个问题的人来说,答案是改变我从控制器方法返回ctx响应的方式,从'send'到'return'。我不知道为什么这在本地工作,而不在Heroku上工作,但这修复了它:
新控制器代码:

module.exports = {
  getUserScreens: async (ctx) => {

    const user = ctx.state.user;
    if (!user) {
      return ctx.badRequest(null, [
        { messages: [{ id: "No authorization header was found" }] },
      ]);
    }

    return strapi.entityService
      .findMany("api::screen.screen", {
        owner: user.id,
        populate: ["image"],
      })
      .then((result) => {
        return result;
      })
      .catch((error) => {
        return error;
      });
  },
};

相关问题