Loopback 3 - 带文件的FormData - 422 ValidationError

时间:2018-02-17 02:50:38

标签: node.js multipartform-data loopbackjs axios

我在前端使用React + Redux,在后端使用loopback3。 我有一个简单的表单,文本输入和一个文件输入。 我像往常一样创建formData

const formToSend = new FormData(document.getElementById("form_add_news"));

然后我把它发送到axios

return axios.post(*url*, action.formData,{
        params:{
            access_token:localStorage.getItem("users_token")
        }
    })
        .then((response) => {
            return response
        })
        .catch(e => {
            return e.response
        })

以下是发送的请求:

> ------WebKitFormBoundaryiBetnol46iuFG9Pt
> Content-Disposition: form-data; name="title"
> 
> efzef

> ------WebKitFormBoundaryiBetnol46iuFG9Pt
> Content-Disposition: form-data; name="background_img"; filename="bs.png"
> Content-Type: image/png
> 
> 
>------WebKitFormBoundaryfDIsq7k9dwZtFjpq
> Content-Disposition: form-data; name="content"
>
> <p>zevzev</p>
>
>
> ------WebKitFormBoundaryiBetnol46iuFG9Pt
> Content-Disposition: form-data; name="users_id"
> 
> 5
> ------WebKitFormBoundaryiBetnol46iuFG9Pt--
> 

请求标题

> Accept:application/json, text/plain, */*

> Content-Type:multipart/form-data; boundary=---WebKitFormBoundaryiBetnol46iuFG9Pt
> ...

但我总是得到422 ValidationError“title”:不能为空,“内容”不能为空......

我试图检查'保存前'钩子,但我的表格中没有任何内容:( 似乎根本没有收到表格。 感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

如果您获得422,则意味着环回不处理输入。因此'在保存之前'不会调用钩子,因为环回首先不会保存任何数据。

然而,您可以尝试'beforeRemote'钩子。 https://loopback.io/doc/en/lb3/Remote-hooks.html

// enter the remote method's name in place of '**'. '**' will call the hook before all methods of the model 

    Model.beforeRemote('**', (ctx, data, next) => { 

    // ctx.args.ARG_NAME has the data you posted
    next();
  });

您可以共享模型的环回代码吗?我觉得标题不能被接受为表单数据输入

相关问题