return failed() 产生错误“return 应返回响应对象”?

问题描述 投票:0回答:1

第一次在Sveltekit中使用fail(),所以我不知道如何修复它。

我在 $lib 中有一个 newsletter.svelte,它有一个简单的表单,用于在用户决定订阅新闻通讯时收集电子邮件地址:

$lib/components/newsletter.svelte :

<script>
    $: emailvalue = null

    async function emailsubscribe(){
        console.log("emailsubscribe fn fired...emailvalue log:", emailvalue)

        let posttheapi = await fetch('api/newsletter',{
        method : "POST",
        credentials : 'include',
        headers: {
        'Accept': 'application/json',
        'Content-type' : 'application/json'
        },
        body: JSON.stringify({
        useremail : emailvalue
        })
        })
        let postresults = await posttheapi.json()

        console.log("results log +page.svelte index page :", postresults )
    }

</script>


<form on:submit|preventDefault={emailsubscribe}>
    <div> 
    <label for="name">Email </label>
      <input type="email" name="email" placeholder="Type here" bind:value={emailvalue} />
    </div>
    <button> Subscribe </button>
</form>

在routes/api/newsletter/+server.js内部,这是我捕获订阅电子邮件地址的方法:

     import { RetryAfterRateLimiter } from 'sveltekit-rate-limiter/server';
     
     const limiter = new RetryAfterRateLimiter({
         //limiter options...
     })

    export async function POST(requestEvent){
    
      await limiter.cookieLimiter?.preflight(requestEvent);
    
        let readbody = await requestEvent.request.json()
        
       // Every call to isLimited counts as a hit towards the ratelimit for the event.
         
         const status = await limiter.check(requestEvent);
         
         if (status.limited) {
          requestEvent.setHeaders({
              'Retry-After': status.retryAfter.toString()
          });
          
          return fail(429);
          }
        
        let subscribedemail = readbody.useremail
        let success = true
        return json({success, subscribedemail})
    
    }

fail() 只能在 +page.server.js 中使用吗?或者我也可以在 +server.js 中使用它吗? 如果是,我收到错误“错误:来自路由 /api/newsletter 的无效响应:处理程序应返回响应对象”

我该如何解决这个问题或者如何让它工作?

sveltekit rate-limiting
1个回答
0
投票

fail
不适用于自定义端点(即
+server.js
),而是用于 表单操作

这看起来也应该是一个表单操作(请参阅有关其工作原理的文档),这些位于

+page.server.js
文件中。在客户端上,您通常会使用表单上的
enhance
操作

对于自定义端点,您必须返回完整的

Response
对象。

© www.soinside.com 2019 - 2024. All rights reserved.