Fix a bug: redirect to homepage for some url.
In a single page application, the url sometimes does not correspond to the actual resources on the server. Thus, it might cause 404 when users refresh the page. By redirecting this kind of url back to the homepage, the proper page can be rendered. If the url does not exist, the front end will redirect to a Not Found page. Test: mannual tested. Change-Id: I36beff436a450ae7fcabe9172df9c7cc217d7305
This commit is contained in:
@@ -2,6 +2,7 @@ import { createRouter, createWebHistory } from 'vue-router'
|
|||||||
import PackageAnalysis from '@/views/PackageAnalysis.vue'
|
import PackageAnalysis from '@/views/PackageAnalysis.vue'
|
||||||
import Demo from'@/views/Demo.vue'
|
import Demo from'@/views/Demo.vue'
|
||||||
import About from '@/views/About.vue'
|
import About from '@/views/About.vue'
|
||||||
|
import NotFound from '@/views/NotFound.vue'
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@@ -21,6 +22,11 @@ const routes = [
|
|||||||
path: '/about',
|
path: '/about',
|
||||||
name: 'About',
|
name: 'About',
|
||||||
component: About
|
component: About
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/:catchAll(.*)',
|
||||||
|
name: 'Not Found',
|
||||||
|
component: NotFound
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
21
tools/ota_analysis/src/views/NotFound.vue
Normal file
21
tools/ota_analysis/src/views/NotFound.vue
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<template>
|
||||||
|
<center>
|
||||||
|
<h1>Not Found!</h1>
|
||||||
|
<p>
|
||||||
|
<a href="/">Go home?</a>
|
||||||
|
</p>
|
||||||
|
</center>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
center {
|
||||||
|
margin: 15vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: var(--border);
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -45,7 +45,7 @@ export default {
|
|||||||
sortable: true,
|
sortable: true,
|
||||||
display: function (row) {
|
display: function (row) {
|
||||||
return (
|
return (
|
||||||
"<a href=/check/" + row.id + '>'
|
"<a href=/check-job/" + row.id + '>'
|
||||||
+ row.status
|
+ row.status
|
||||||
+ "</a>"
|
+ "</a>"
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import JobList from '@/views/JobList.vue'
|
|||||||
import JobDetails from '@/views/JobDetails.vue'
|
import JobDetails from '@/views/JobDetails.vue'
|
||||||
import About from '@/views/About.vue'
|
import About from '@/views/About.vue'
|
||||||
import JobConfigure from '@/views/JobConfigure.vue'
|
import JobConfigure from '@/views/JobConfigure.vue'
|
||||||
|
import NotFound from '@/views/NotFound.vue'
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
@@ -11,7 +12,7 @@ const routes = [
|
|||||||
component: JobList
|
component: JobList
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/check/:id',
|
path: '/check-job/:id',
|
||||||
name: 'JobDetails',
|
name: 'JobDetails',
|
||||||
props: true,
|
props: true,
|
||||||
component: JobDetails
|
component: JobDetails
|
||||||
@@ -25,6 +26,11 @@ const routes = [
|
|||||||
path: '/create',
|
path: '/create',
|
||||||
name: 'Create',
|
name: 'Create',
|
||||||
component: JobConfigure
|
component: JobConfigure
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/:catchAll(.*)',
|
||||||
|
name: 'Not Found',
|
||||||
|
component: NotFound
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
21
tools/otagui/src/views/NotFound.vue
Normal file
21
tools/otagui/src/views/NotFound.vue
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<template>
|
||||||
|
<center>
|
||||||
|
<h1>Not Found!</h1>
|
||||||
|
<p>
|
||||||
|
<a href="/">Go home?</a>
|
||||||
|
</p>
|
||||||
|
</center>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
center {
|
||||||
|
margin: 15vw;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: var(--border);
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -64,22 +64,20 @@ class RequestHandler(CORSSimpleHTTPHandler):
|
|||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
def do_GET(self):
|
def do_GET(self):
|
||||||
if self.path.startswith('/check'):
|
if self.path == '/check' or self.path == '/check/':
|
||||||
if self.path == '/check' or self.path == '/check/':
|
statuses = jobs.get_status()
|
||||||
statuses = jobs.get_status()
|
self._set_response(type='application/json')
|
||||||
self._set_response(type='application/json')
|
self.wfile.write(
|
||||||
self.wfile.write(
|
json.dumps([status.to_dict_basic()
|
||||||
json.dumps([status.to_dict_basic()
|
for status in statuses]).encode()
|
||||||
for status in statuses]).encode()
|
)
|
||||||
)
|
elif self.path.startswith('/check/'):
|
||||||
else:
|
id = self.path[7:]
|
||||||
id = self.path[7:]
|
status = jobs.get_status_by_ID(id=id)
|
||||||
status = jobs.get_status_by_ID(id=id)
|
self._set_response(type='application/json')
|
||||||
self._set_response(type='application/json')
|
self.wfile.write(
|
||||||
self.wfile.write(
|
json.dumps(status.to_dict_detail(target_lib)).encode()
|
||||||
json.dumps(status.to_dict_detail(target_lib)).encode()
|
)
|
||||||
)
|
|
||||||
return
|
|
||||||
elif self.path.startswith('/file'):
|
elif self.path.startswith('/file'):
|
||||||
if self.path == '/file' or self.path == '/file/':
|
if self.path == '/file' or self.path == '/file/':
|
||||||
file_list = target_lib.get_builds()
|
file_list = target_lib.get_builds()
|
||||||
@@ -99,7 +97,11 @@ class RequestHandler(CORSSimpleHTTPHandler):
|
|||||||
self.path = self.path[10:]
|
self.path = self.path[10:]
|
||||||
return CORSSimpleHTTPHandler.do_GET(self)
|
return CORSSimpleHTTPHandler.do_GET(self)
|
||||||
else:
|
else:
|
||||||
self.path = '/dist' + self.path
|
if not os.path.exists('dist' + self.path):
|
||||||
|
logging.info('redirect to dist')
|
||||||
|
self.path = '/dist/'
|
||||||
|
else:
|
||||||
|
self.path = '/dist' + self.path
|
||||||
return CORSSimpleHTTPHandler.do_GET(self)
|
return CORSSimpleHTTPHandler.do_GET(self)
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user