如何处理数据库中的ECONNRESET错误



我有一个remix操作函数,它接受一个文件作为formData请求对象,然后将其上传到supabase。之后,我得到上传图像的URL并返回。

我的功能:

const fileExt = filename.split(".").pop();
const fileName = `${Math.random().toFixed(10)}.${fileExt}`;
const filePath = `${fileName}`;
const { error: uploadError } = await supabaseClient.storage
.from("public")
.upload(`misc/${filePath}`, stream);
if (uploadError) {
console.error(uploadError);
throw new Error(uploadError.message);
}
const { publicURL, error } = await supabaseClient.storage
.from("public")
.getPublicUrl(`misc/${filePath}`);
if (error) {
console.error(error);
throw new Error(error.message);
}
!publicURL && console.error(`No public URL for ${filePath}`);
return publicURL;

因为formData是一个multipart/form-data,所以我需要解析它,我通过在uploadHandler函数中抛出上面的代码来处理它,然后:

const formData = await parseMultipartFormData(
request,
uploadHandler
);

代码正常工作,但在其他时候,它会失败并出现错误:ECONNRESET,据我所知,这可能与节点异步代码有关,但我一直无法解决它。我如何才能避免Suabase不断给出的随机ECONNRESET错误?

我已经通过文件上传和混音完成了这项工作。我认为,虽然每个人的用例都不一样,但在许多情况下,如果是经过身份验证的用户上传到Suabase存储或Cloudflare等服务,最好从客户端上传。如果我们使用的是无服务器环境,这一点尤其正确。使用cloudflare,我用useFetcher((获取了一个唯一的签名上传url。使用Suabase,团队已经设置了他们的JS库来验证用户,我们在数据库上编写策略来保护上传。因此,使用客户端要容易得多。例如,当我们上传大型视频文件,并且我们希望使用暂停和恢复上传的功能时,这就变得更加重要了。从客户端操作要比通过独立的无服务器功能操作容易得多。如果我们担心来自客户端的数据,我们可以将加密的敏感数据放在cookie中,这样当客户端完成时,它(例如(将{completed:true}发送到Action,Action从cookie中获取数据并将其保存到数据库

我相信这并不能解决你的问题,就像你真的需要通过后端来做一样,但我只是想分享一下,根据我的经验,用混音的方式做每件事并不总是最好的主意。有时客户会更好。

最新更新