NodeJS “请求失败,状态代码为405”,在Vercel上部署应用程序后,我收到此错误

ewm0tg9j  于 5个月前  发布在  Node.js
关注(0)|答案(4)|浏览(78)

项目在本地服务器上工作得很好,但在部署到vercel上后,它给出了这个错误,前端和后端都部署在vercel上
以下是实时项目:live project
前端github:frontend后端github:backend
这是错误图像:error image
我想修复这个错误,使项目的工作

mqkwyuun

mqkwyuun1#

我也遇到了同样的问题,在localhost上运行良好,但在Vercel上部署时返回405。我决定在www.example.com上部署我的应用程序Render.com,它正在工作。这似乎是Vercel方面的一个“bug”或错误配置。尝试在替代提供商上部署您的应用程序,就像我所做的那样。这让我延迟了几周,现在我的应用程序已经启动并在Render上运行。(我不属于渲染;我只是发现它是一个可行的替代方案,因为Vercel是抛出405错误没有明显的原因)(对不起,这是我的第一个SO答案)
编辑:经过一段时间的思考,我的问题是,我使用VERCEL_URL(https://vercel.com/docs/projects/environment-variables/system-environment-variables)在我的代码中,由于vercel为同一个部署生成多个URL,我的服务器试图从不同的URL获取,而不是我正在获取的URL,尽管它是同一个部署。我通过提供自己的VERCEL_URL env变量而不是使用自动变量来修复它,我在我的部署设置中禁用了“自动公开系统环境变量”。我的项目现在在vercel中工作。我希望这对面临同样问题的任何人都有帮助。

uhry853o

uhry853o2#

在看过你的代码后,我确信你和我遇到了同样的问题。看,它与axios的工作原理有关:在localhost上:
1.
用户名:“代理服务器”:“http://url.com“
和2.

export default axios.create({
  baseURL: "https://url",
});

字符串
对于给定相对路径的axio是足够的,例如:

const loginHandler = async (email, password) => {
    try {
      const response = await axios.post(
        "/api/users/login",
        {
          email,
          password,
        },
        {
          headers: {
            "Content-Type": "application/json",
          },
        }
      );


但是当托管在Vercel上时,它现在需要绝对路径。所以基本上在你的axios调用中将相对路径替换为绝对路径,这样就可以解决你的问题了:

const loginHandler = async (email, password) => {
    try {
      const response = await axios.post(
        `https://url.vercel.app`+`/api/users/login`,
        {
          email,
          password,
        },
        {
          headers: {
            "Content-Type": "application/json",
          },
        }
      );

wmtdaxz3

wmtdaxz33#

如果您的BASEURL位于环境变量中,则在vercel中部署时,请在pROCULVERCEL/SETTINGS/VARIAVEIS ENVIRONMENT中注册环境变量

o2rvlv0m

o2rvlv0m4#

错误405是“Method not allowed”。这很可能是GET vs POST。即,您正在尝试调用/使用错误的HTTP动词的端点。或者可能您的后端已将其定义为GET,但应将其更改为POST。当用户只是请求数据但不更改数据库中的任何状态时,您希望使用GET。POST用于插入新记录时。然后PUT和PATCH之间有一个微妙的区别,但从GET和POST开始。

相关问题