未捕获(承诺)错误:请求失败,状态码为404

时间:2018-01-03 02:36:06

标签: reactjs react-redux axios dispatch-async

从API中获取一些数据时,我遇到了上述错误。以下是action creator我正在尝试GET数据的代码:

import { FETCH_USER } from './types';
import axios from 'axios';


export const fetchUser = () => async dispatch => {

        console.log('fetchUser');

        const res= await axios.get('/api/current_user');

        dispatch({ type: FETCH_USER, payload: res });

}; 

当我在代码编辑器中调试时,控制台正在给我以下错误:

SyntaxError: Unexpected token import

4 个答案:

答案 0 :(得分:0)

我解决了。这是我的其他js文件中的一个小的语法错误。

答案 1 :(得分:0)

通常,当GET方法中提供的网址/位置不正确时,就会出现此错误。 因此,请再次检查网址/位置并进行更正。

所以这里很可能有一些错误:'/ api / current_user'

答案 2 :(得分:0)

就我而言,这是一个较小的语法错误(方括号放错了位置)。 我的代码如下:

axiosget("/api-url").then(
  (response) => {
    doSomething();
  }), () => {
  doError();
  }
);

代替此:

axiosget("/api-url").then(
  (response) => {
    doSomething();
  }, () => {
  doError();
  });
);

如果收到此错误消息,则意味着您的错误处理代码不存在或无法到达,因此未处理承诺(因为未正确设置捕获部分)。 / p>

如果收到此消息,请始终仔细检查语法!

答案 3 :(得分:0)

如果您使用 laravel 作为 API,使用 vue/Nuxtjs 作为前端,使用 axios 将数据发送到 API.... 使用 try{} catch(){} 块以不正确的方式发送 Laravel 验证错误或通过 axios 以不正确的方式使用 try() catch(){} 块接收错误时,可能会遇到此类错误。 在这里,尝试使用 catch 块进行错误处理。

如果您的 API 路由调用公共函数,它的名称为“register()”,那么您的控制器中的函数必须喜欢以下...(我使用 laravel-8 作为 API)

public function register(Request $request) {
    try {
        $fields = $request->validate([
            'name' => 'required|string',
            'email' => 'required|string|email|unique:users',
            'password' => 'required|string|confirmed',
        ]);

        $user = User::create([
            'name' => $fields['name'],
            'email' => $fields['email'],
            'password' => bcrypt($fields['password'])
        ]);
        
        $token = $user->createToken('myapptoken')->plainTextToken;
        $response = [
            'user' => $user,
            'token' => $token,
        ];
        
        return response()->json($response, 200);
    } catch(ValidationException $e) {            
        return response()->json([
            'status' => 'error',
            'msg' => 'error',
            'errors' => $e->errors()
        ], 422);
    }
}

并且前端 Nuxt 或 vue 方法名称是“registerNewUser()”,因此,代码可以用于错误处理...

async registerNewUser() {
    try {
      let data = {
        name             : this.name.trim(),
        email            : this.email.trim(),
        password         : this.password.trim(),
        password_confirmation : this.password_confirmation.trim(),
      };
      let headers = {
        headers: {
            'Accept': 'application/json',
        }
      };
      await this.$axios
      .post("/api/register", data, headers)
      .then((response) => {
        console.log("response", response);
        if(response) {
          // console.log(response)
        } else {

        }
      });
    } catch(err) {
      // here we are receiving validation errors
      console.log("Err == ", err.response);
      console.log(err.response.data.errors);
    }
}

您在 axios 内接收响应,然后使用 err.response 在 catch 块内阻塞或接收错误

这里,

let data = {
   name             : this.name.trim(),
   email            : this.email.trim(),
   password         : this.password.trim(),
   password_confirmation : this.password_confirmation.trim(),
};

给定代码用于 Nuxtjs 或 vuejs 的数据。如果不知道您可以使用以下数据或任何其他数据...

let data = {
   name             : 'Kallol',
   email            : 'kallolray94@gmail.com',
   password         : '123456',
   password_confirmation : '123456',
};