Axios response.data返回HTML而不是对象

wlzqhblo  于 2022-12-26  发布在  iOS
关注(0)|答案(3)|浏览(330)

我需要关于Axios的帮助。我在Laravel 6(带有SPARK包)和VueJS(版本2)上开发了一个SPA网络应用程序。
在一个Vue组件上,我想从我的bdd中检索数据。因此,我使用Axios对API URI发出get请求。但是,当我调用Axios request时,Response对象中的数据字段是一个HTML代码。
这是我的代码:

    • 路由/web. php**
Route::get('/', function(){
    return view('welcome');
});

Route::middleware('auth')->get('/{any?}', function (){
    return view('documents');
})->where('any', '[\/\w\.-]*');

"welcome"视图是一个刀片页面,如果用户未通过身份验证,则重定向到"/login "。否则,重定向到"/home"。链接"/home "在app.js中的vue-router上定义。另一个路径是显示Web应用程序(它是单页应用程序)的唯一方式。Vue示例位于" passeport "视图中。

    • 资源/js/应用程序. js**
import 'es6-promise/auto'

require('spark-bootstrap');
require('./components/bootstrap');

window.Vue = require('vue');

import VueRouter from 'vue-router';
Vue.use(VueRouter);

import VueAxios from 'vue-axios';
import axios from 'axios';
Vue.use(VueAxios, axios);

Vue.component('index', require('./components/pages/index').default);

import Dashboard from './components/pages/dashboard.vue';
...

const routes = [ 
    {
        name: 'dashboard',
        path: '/home',
        component: Dashboard,
    },
    {...}
]

const router = new VueRouter({ 
    history: true,
    mode: 'history', 
    routes: routes
});

var app = new Vue({
    mixins: [require('spark')],
    router,
});

在Vue示例化中添加路由器包。它与spark组件处于相同的上下文中(由#spark-app元素标识)

    • 资源/视图/文档. blade. php**
@extends('spark::layouts.app')

@section('content')
    <div id="app">
        <index :user="user"></index>
    </div>
@endsection

It is the view returned for any path. In the spark::layout.app, there is only a div with id="spark-app" and the @yield('content').

    • 资源/js/组件/页面/索引. vue**
<template>
    <transition name="fade">
      <Component :is="layout" :user="user">
        <router-view :layout.sync="layout" :user="user"></router-view>
      </Component>
    </transition>
</template>
.
.
<script>
    const default_layout = "default";

    export default{
      props: ['user'],

      data(){
        return{
          layout: 'div',
        }
      },
    }
</script>

这只是vue组件与路由器视图配置与布局。

    • 资源/js/组件/页面/ Jmeter 板. vue**
<template>
...
</template>

<script>
import Default from './../layouts/Default.vue'
    export default {
        props: ['user'],

        data: function () {
            return {
                documents: []
            }
        },
        created() { 
            this.$emit('update:layout', Default);
        },
        mounted(){
            // extract passeports's informations
            this.axios.get('/api/documentslist').then(response => {
                console.log(response);
                this.documents= response.data.data;
            });
        }
    }
</script>

在这里,我调用routes/api.php中定义的documentslist API。

    • 路径/api.php**
Route::middleware('auth:api')->group(function () {
    Route::get('/user', function (Request $request) {
        return $request->user();
    });
    Route::get('/documentslist', 'DocumentController@list');
});
    • 应用程序/http/控制器/文档控制器. php**
...
public function list(Request $request){
   return DocumentCollection(Document::all());
}
...

When I go to "/home", I verified "documents" data in Vue (or in the javascript console log), and response.data = "\r\n\r\n\r\n (...) v-if="notification.creator" :src="notification.creator.photo_url" class=... (10024 total length)"
但是,DocumentController中的list方法必须返回文档列表,而不是HTML代码。
另外,使用Passport Laravel实现了登录和API令牌的统一认证,Axios请求在同一个项目中工作,没有SPA结构。
我希望我的问题解释得很清楚,而且我忘记了任何需要理解的细节。
谢谢。

mwecs4sa

mwecs4sa1#

您可以像这样从控制器返回

return response()->json(Document::all());
gajydyqb

gajydyqb2#

我怀疑API链接重定向到SPA路由(在routes/web.php中,任何路径都返回"home"视图)。我尝试在routes/web.php中更改路由。
而不是:

Route::middleware('auth')->get('/{any?}', function (){
    return view('home');
})->where('any', '[\/\w\.-]*');

我把这个:

Route::middleware('auth')->get('/home', function (){
    return view('home');
});

像这样,这条路线没有考虑所有的路径。
而且...它工作!但是...它不是我想要的:(事实上,如果没有"/{any?}"的路径,SPA就不工作。
我不明白为什么这个方法在Laravel中的另一个项目(没有Spark包),而不与这个项目一起工作。

ipakzgxi

ipakzgxi3#

我不知道laravel,但是当你调用的路由不正确时,这个问题就会出现。做一些努力,检查应用程序最终调用的是什么路由,也看看你的代理设置。

****我是NodeJ的开发人员,而不是Laravel

相关问题