Javascript 为某些路由禁用vue路由器?或者如何运行SPA后端和非SPA前端?

Javascript 为某些路由禁用vue路由器?或者如何运行SPA后端和非SPA前端?,javascript,laravel,vue.js,single-page-application,vue-router,Javascript,Laravel,Vue.js,Single Page Application,Vue Router,因此,我正在Laravel 5.3和Vue 2中开发一个网站/网络应用程序。SEO很重要,所以我想在Laravel+Blade中保留站点的前端/可爬网部分,在Vue 2.0中只保留一些不必要的小部分,所以我不必使用Ajax加载页面内容,也不需要允许像Google这样的爬网程序对站点进行爬网和索引。(顺便说一句,Google确实加载了JS,但并不等待Ajax加载,所以它是命中/未命中的) 但是,在后端,我想使用Vue和VueRouter进行完全SPA 我如何最好地将两者分开 我希望我的后端可以通过

因此,我正在Laravel 5.3和Vue 2中开发一个网站/网络应用程序。SEO很重要,所以我想在Laravel+Blade中保留站点的前端/可爬网部分,在Vue 2.0中只保留一些不必要的小部分,所以我不必使用Ajax加载页面内容,也不需要允许像Google这样的爬网程序对站点进行爬网和索引。(顺便说一句,Google确实加载了JS,但并不等待Ajax加载,所以它是命中/未命中的)

但是,在后端,我想使用Vue和VueRouter进行完全SPA

我如何最好地将两者分开

我希望我的后端可以通过/manager

到目前为止,我的解决方案是:

#routes.php
###Laravel/前端路线在此(SPA之前)###
路由::get('/manager/{spaplate?}',['middleware'=>'auth',function(){
返回视图('manager.index');
}])->其中(['spaplate'=>'.'])->name('manager.index');
然后在Vue中,我使用:

const路由=[
{路径:'/',名称:'dashboard.index',组件:require('./pages/manager/dashboard.vue'),
{路径:'/categories',名称:'categories.index',组件:require('./pages/manager/categories/index.vue'),
{path:'/category/:id',name:'category',component:require('./pages/manager/categories/categories.vue')}
];
常量路由器=新的VueRouter({
路线,
基数:'/manager'
})
const app=新的Vue({
el:“#应用程序”,
路由器
...
这确实有效。但是,它感觉不太对。因为视图路由器仍然在我的前端加载(附加hash/hashbang)


那么,有没有更好的方法将我的Laravel前端与我的Vue SPA后端分开?

对于任何遇到这种情况的人,我都找不到任何关于禁用VueRouter以获得特定链接的信息。我认为这是不可能的,而且可能也不值得这么麻烦


所以我决定将我所有的代码库重新编写成SPA。现在是时候了,没有真正的理由不这样做。我正在使用Prerender.io的自托管服务进行SEO的预渲染等。

只是为了澄清未来任何人的一些误解

谷歌可以抓取基于JS的前端网站,而无需预渲染或服务器端渲染。有一点需要注意,谷歌使用Chrome 41来抓取和渲染网站,因此您的javascript必须足够多地填充,以支持Chrome 41功能(或者至少您基于Vue的数据需要多填充才能支持Chrome 41).到目前为止,我使用babel还没有遇到任何问题

Laravel前端与我的Vue SPA后端

这是向后的。如果您正在这样做,请不要这样做。Laravel应该是您的后端和前端(通过blade+bootstrap+Vue/react),或者仅是您的后端。Vue.js是前端框架,不应该用作“后端”所有的数据库查询、身份验证、计算、电子邮件发送等都应该由Laravel处理。Laravel非常适合后端工作,用Laravel编写整个API并将Vue专门用于前端是完全合理的。当然,您可能能够将其整合在一起并以某种方式使其工作,但您不应该这样做,而且您只需要无缘无故地给自己制造额外的头痛

但也要回答这个问题,因为对于一个只有一部分站点作为SPA的网站来说是有理由的(也许博客是一个SPA站点,但完全独立于“关于我们”、“联系我们”等页面)(例如,您可能正在对网站进行部分改造,并希望随着时间的推移推出更新的页面,而不是一次解决所有问题)。在这种情况下,您可以指定Vue路由器运行的特定路由,其他所有路由将由laravel处理

Route::get('/DIR/{vue_capture?}', function () {
    return view('vue.index');
})->where('vue_capture', '[\/\w\.-]*');
这将允许Vue路由器处理
DIR
子目录中的所有内容,但允许其他路由在其旁边共存


但是,如果您的应用程序要求Vue Router在根域上具有访问权限,则只需将其放在路由文件的最末尾,因为当路由匹配完成时,它会在第一次匹配后退出。因此,将其放在路由文件的末尾,实质上就是将其用作“一网打尽”对于上面未指定的任何路由。可以将其视为提前返回。

为了澄清,我指的是在我的后端API中使用相同的Laravel应用程序,只是使用Vue.js访问它,而不是将Vue.js专门用作我的后端。但是,是的,你是对的,这正是我设置它的方式,但我最终放弃了所有Laravel视图并迁移了它超过100%的Vue.js SPA,带有自托管的prerender.io安装,以确保安全,因此我100%知道它会像正常情况一样被爬网