SvelteKit中的req.body未定义。

3

我正在尝试配置SvelteKit以便与我的CMS一起使用。

我在api/query.js中从我的CMS获取数据,在index.svelte中从api/query中获取数据。

它的工作很好,我可以获取到所有数据,但是如果我在fetch请求中包含body,则会出现错误"Cannot read property 'split' of undefined"。 代码:

// api/query.js
export async function post(req) {
  const url = API_URL;
  const auth = Buffer.from(`${API_USER_EMAIL}:${API_USER_PASSWORD}`).toString('base64');

  const res = await fetch(url, {
    method: 'POST',
    headers: {
      'Authorization': `Basic ${auth}`,
    },
    body: JSON.stringify(req.body),
  });
  const data = await res.json();

  return {
    status: data.code,
    body: data
  }
}

// index.svelte
export async function load({ fetch }) {
    const res = await fetch('/api/query', {
        method: 'POST',
        // body: JSON.stringify({
        //  query: 'site.title',
        // }),
    });
    const data = await res.json();

    return {
        status: data.status || 200,
        props: data
    }
}

被注释掉的代码部分是导致错误的原因之一。如果我在api/query.js中使用console.log(req.body),它会返回undefined

是否有办法使用Express.js的body-parser?还是有其他方法可以解决这个错误?

1个回答

1

为两个路由设置content-type头。

同时确保所有头部键都是小写。

示例:

...
    headers: {
        'authorization': `Basic ${auth}`,
        'content-type': 'application/json'
    },
...

谢谢!我已经尝试了一个小时使用hooks.ts中的中间件和StreamReaders解析request.body,但这只是让我能够使用request.body并完成它。 - kiloton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接