使用axios(vue + laravel)发布后获取返回的数据

时间:2019-10-31 16:20:18

标签: php laravel vue.js axios

我想创建一个自定义登录系统,以vue作为前端,laravel处理api,并以axios作为两者之间的控制器。我想从我的AuthController获取返回的数据。这是我的代码:

Vue:

export default {
name: 'Login',
data(){
    return {
        user_input: [
            {email: ''},
            {password: ''}
        ],
        csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content')
    }
},
methods: {
    userLogin: function(){
        let params = Object.assign ({}, this.user_input)
        axios.post('/api/login/', params)
        .then(function(response){
            console.log(response.data)
        })
        .catch(function(error){
            console.log(error)
        })

    }
}
}

在AuthController中:

public function login(Request $request) {
    return "Hey";
}

控制台上的输出是这样:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="csrf-token" content="40lajOfdWdmIQ1yP49dyeyToidT79CntGyHqrNRD">
<link rel="stylesheet" href="/css/app.css">
<title>VueComplete</title>
</head>
<body>
<div id="app">
    <App/>
</div>
<script src="http://vuecomplete.test/js/app.js"></script>
</body>

(这基本上是我的app.blade.php视图)。

为什么不返回“嘿”?

我也尝试过:

public function login(Request $request) {
    return $request->email;
}

但是它产生了相同的结果。我怎样才能解决这个问题? 多谢!

更新

我正在使用vue-router在laravel中创建SPA。在我的路线(web.php)中,我有点像这样:

Route::get('/{any}', 'SPAController@index')->where('any','.*');

然后在控制器中:

public function index() {
    return view('app');
}

这可能就是为什么它返回app.blade.php的整个html代码的原因。
在仍然使用vue-router的SPA功能的同时,是否可以访问api/login

2 个答案:

答案 0 :(得分:1)

从网络路由中排除api路由

Route::get('/{any}', 'SPAController@index')->where('any', '^(?!api).*$');

希望这会有所帮助

答案 1 :(得分:0)

我解决了。随时可能是api/login而不是/api/loginapi/login/之类的东西。