首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Laravel错误验证访问Axios错误

从Laravel错误验证访问Axios错误
EN

Stack Overflow用户
提问于 2021-05-25 11:27:28
回答 1查看 42关注 0票数 0

构建了Laravel-API,它通过axios和VUE 3与前端进行通信。

这是我的laravel TransactionController:

代码语言:javascript
复制
public function store(TransactionRequest $request)
    {
        try {
            $transaction = Transaction::create($request->all());

            return response()->json([
                'message' => 'Transaction created.',
                'data' => $transaction
            ], Response::HTTP_OK);
        } catch (QueryException $e) {
            return response()->json([
                'message' => $e->errorInfo
            ], Response::HTTP_INTERNAL_SERVER_ERROR);
        }

    }

我使用来自FormRequest的自定义验证:

代码语言:javascript
复制
public function rules()
    {
        return [
            'title' => 'required',
            'amount' => ['required', 'numeric'],
            'type' => ['required', 'in:expense,revenue']
        ];
    }

    protected function failedValidation(\Illuminate\Contracts\Validation\Validator $validator)
    {
        $response = new JsonResponse([
                    'message' => 'The given data is invalid', 
                    'errors' => $validator->errors()
        ], 422);

        throw new \Illuminate\Validation\ValidationException($validator, $response);
    }

这是我的Create.vue:

代码语言:javascript
复制
<script>
import { reactive, ref } from 'vue'
import { useRouter } from 'vue-router'
import axios from 'axios'

export default {
    setup() {
        const transaction = reactive({
            title: '',
            amount: '',
            time: '',
            type: ''
        });

        const validation = ref([]);

        const router = useRouter();

        function store() {
            axios.post('http://127.0.0.1:8000/api/transaction', transaction)
            .then(() => {
                router.push({
                    name: 'transaction.index'
                });
            }).catch((err) => {
                validation.value = err.response.data
                console.log(validation)
            });
        }

        return {
            transaction,
            validation,
            router,
            store
        }
    }
}
</script>

我使用post man尝试了我的API,结果如下:

代码语言:javascript
复制
{
    "message": "The given data is invalid",
    "errors": {
        "title": [
            "The title field is required."
        ],
        "amount": [
            "The amount field is required."
        ],
        "type": [
            "The type field is required."
        ]
    }
}

像预期的那样工作,

但是当我尝试登录浏览器时,结果很复杂,就像嵌套的对象和数组一样,请看图片

我如何访问"data“属性,或者如何使它像postman的结果一样简单?

EN

回答 1

Stack Overflow用户

发布于 2021-05-26 17:49:14

在您的函数add .errors中,这将返回来自您的后端的所有错误,如下所示。如果我理解你的问题的话

代码语言:javascript
复制
function store() {
                axios.post('http://127.0.0.1:8000/api/transaction', transaction)
                .then(() => {
                    router.push({
                        name: 'transaction.index'
                    });
                }).catch((err) => {
                    validation.value = err.response.data.errors // added .errors
                    console.log(validation)
                });
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67681381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档