终结点上不允许Sveltekit POST方法

izkcnapc  于 2022-09-18  发布在  Java
关注(0)|答案(3)|浏览(153)

我正在尝试让这个FETCH方法在Svelte中工作

当page.svelte调用函数来获取数据时,我在控制台中收到以下内容

[HTTP/1.1 405 Method Not Allowed 19ms]

我已经把范围缩小到了

POST method not allowed

是否需要在配置文件中设置变量,或者是否缺少其他解决方案?

//svelte.config.js

import adapter from '@sveltejs/adapter-auto';

const config = {
    kit: {
        adapter: adapter(),
        methodOverride: {
            allowed: ['POST']
        },
    }
};

export default config;

这两个文件都位于路径文件夹中

//FETCH-data.js

export const POST = async(data) => {
  const response = // get data function here
  return {
    body: {
        data: response
    }
  }
}

//Page.svelte

async function fetchData() {
   const response = await fetch('./fetch-data', {
     method: 'POST',
     body: JSON.stringify(),
     headers: {
       'content-type': 'application/json'
     }
   })
   const { data } = await response.json()
   return data
}
hxzsmxv2

hxzsmxv21#

解决方案是在Get-data.js文件中将POST变量名更改为小写

rqmkfv5c

rqmkfv5c2#

由于不同的原因,我也犯了同样的错误,并且您的问题和答案中的语法再次更改,因此我将添加我的发现:

  • +page.server.ts不再应该是export const POST,而是不需要返回任何内容的export const actions: Actions = { ... }
  • +server.ts仍使用function POST(event: RequestEvent),需要从Fetch接口返回Response
  • Cookie不能再使用setHeaders设置,而必须使用cookies。否则,处理程序也返回405。
ijxebb2r

ijxebb2r3#

由于旧的SvelteKit版本(我使用的是.456,编写本文时的当前版本是.484),我也遇到了同样的问题。因此,在参考文档时,请确保您拥有最新版本的框架;)

相关问题