Vue SSR serverPrefetch server redirect with this.$ssrContext.res.redirect
Vue SSR serverPrefetch server redirect with this.$ssrContext.res.redirect
是否可以在 VUE SSR 中从组件进行重定向,而不会在服务器控制台上出现错误:[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
?
代码如下:
serverPrefetch() {
// need the data from this.fetchPage service to decide on the redirect
return this.fetchPage().then(function (response) {
// do some checks here
// THIS IS THE NODE EXPRESS REDIRECT
this.$ssrContext.res.redirect('/');
this.$ssrContext.res.end(); // with or without, same error
}.bind(this));
},
beforeMount() {
this.fetchPage();
}
注意:如果我尝试使用 this.$router.replace('/')
(或任何其他方法),我会收到错误消息:[Vue warn]: Error in callback for watcher $route: ReferenceError: document is not defined
.
在我的项目中,我在客户端进行了重定向,但我想知道是否也可以从服务器端进行重定向。
长话短说:
Reject the serverPrefetch with {url: '/redirect-route'}
找到解决方案如下:如果您将 vue-ssr 项目实现为 https://github.com/vuejs/vue-hackernews-2.0 存储库,在 server/index.js 中您有一个 handleError 函数,其中有一个重定向:
if (err.url) {
res.redirect(err.url);
}
您需要在组件中做的是:
serverPrefetch() {
return this.fetchPage().then(res => {
if(res === 'MY_REDIRECT_CONDITION') {
// !!! THE ACTUAL REDIRECT TRIGGER !!!
return Promise.reject({url: '/'});
}
});
},
是否可以在 VUE SSR 中从组件进行重定向,而不会在服务器控制台上出现错误:[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
?
代码如下:
serverPrefetch() {
// need the data from this.fetchPage service to decide on the redirect
return this.fetchPage().then(function (response) {
// do some checks here
// THIS IS THE NODE EXPRESS REDIRECT
this.$ssrContext.res.redirect('/');
this.$ssrContext.res.end(); // with or without, same error
}.bind(this));
},
beforeMount() {
this.fetchPage();
}
注意:如果我尝试使用 this.$router.replace('/')
(或任何其他方法),我会收到错误消息:[Vue warn]: Error in callback for watcher $route: ReferenceError: document is not defined
.
在我的项目中,我在客户端进行了重定向,但我想知道是否也可以从服务器端进行重定向。
长话短说:
Reject the serverPrefetch with {url: '/redirect-route'}
找到解决方案如下:如果您将 vue-ssr 项目实现为 https://github.com/vuejs/vue-hackernews-2.0 存储库,在 server/index.js 中您有一个 handleError 函数,其中有一个重定向:
if (err.url) {
res.redirect(err.url);
}
您需要在组件中做的是:
serverPrefetch() {
return this.fetchPage().then(res => {
if(res === 'MY_REDIRECT_CONDITION') {
// !!! THE ACTUAL REDIRECT TRIGGER !!!
return Promise.reject({url: '/'});
}
});
},