Comments (7)
Hi @ruslansp ,
If you look at
Lines 112 to 162 in ea4aeef
Line 160 in ea4aeef
So even if I use context.req.res.redirect(302, '/xxxx');
somewhere, line 160 will try to send something... and it seems that's a problem since 302/301 HTTP response should only have minimal headers, no content...
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:482:11)
at ServerResponse.header (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/express/lib/response.js:170:12)
at renderer.renderToString (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/@akryum/vue-cli-plugin-ssr/lib/app.js:119:15)
at /Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:9536:15
at RenderContext.done (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:9187:15)
at RenderContext.next (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2588:19)
at RenderContext.cachedWrite [as write] (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2451:9)
at RenderContext.next (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2602:25)
at RenderContext.cachedWrite [as write] (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2451:9)
at RenderContext.next (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2602:25)
at RenderContext.cachedWrite [as write] (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2451:9)
at RenderContext.next (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2602:25)
at RenderContext.cachedWrite [as write] (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2451:9)
at RenderContext.next (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2602:25)
at RenderContext.cachedWrite [as write] (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:2451:9)
(node:4202) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at ServerResponse.setHeader (_http_outgoing.js:482:11)
at ServerResponse.header (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/express/lib/response.js:170:12)
at renderer.renderToString (/Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/@akryum/vue-cli-plugin-ssr/lib/app.js:119:15)
at /Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:9536:15
at /Users/XXXXXXXXXX/Documents/YYYYYYY/node_modules/vue-server-renderer/build.dev.js:9170:20
(node:4202) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
from vue-cli-plugin-ssr.
Hi @ruslansp , did you find how to do that?
Thank you,
from vue-cli-plugin-ssr.
@Akryum maybe you have an idea on this? I saw multiple issues about that
Here is an example: https://stackoverflow.com/a/57925996/11314316 could be great to be able overriding all your error catching logic. We could like that custom if we send html or not depending on httpCode (applied only for redirections 301/302?)
Thank you,
from vue-cli-plugin-ssr.
Hi. In version v0.6.0 added extendContext parameter in config. You can add respose to context and continue to use res for redirect. Not sure, but it seems you can solve it this way.
Iām not using it myself.
from vue-cli-plugin-ssr.
Does #225 help with this?
It's allowed me to do something like:
In app set a variable like this.$root._routeRedirect = '/something'
entry-server.js
context.rendered = () => {
// ...
context._routeRedirect = app._routeRedirect || null
}
then in vue.config.js
For 404s I was just setting
extendContext = (req, res, process) => {
const extension = {}
if (req.path === '/404') {
extension.httpCode = 404
}
return extension
}
For redirects based on a vue instance condition, changing the response's status late, to not match context.httpCode will stop res.send(html) from sending, stopping errors.
onRender = (res, context) => {
if (context._routeRedirect) {
res.redirect(301, context._routeRedirect)
}
}
from vue-cli-plugin-ssr.
2 years since then! And upgrading some Vue librairies makes the error Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
crashing the server now! Whereas before it was just some innocent logs... haha (that I had ignored for the ease)!
To keep my own logic of redirecting within components with this.$ssrContext.req.res.redirect(302, redirectUri)
I just did a patch/PR #289 (@sonuku yours sounded a bit more complicated to me but I appreciate nonetheless!).
Hope this helps :)
from vue-cli-plugin-ssr.
Related Issues (20)
- Webpack docs: what does `api` refer to? HOT 1
- how to use the dist folder?
- Error returned after installing vue-extend-layout extension
- app.js script chunk rendered twice HOT 5
- SyntaxError: Unexpected token export register-service-worker HOT 4
- multiple run mounted() HOT 3
- https protocol support HOT 1
- ESLint reccomended `no-async-promise-executor` broken in example HOT 1
- extendServer devServer watch
- Vuex strict mode always leads to "do not mutate vuex store state outside mutation handlers" HOT 2
- "document is not defined" when criticalCSS is disabled in production
- Vuex store is not loaded to client side app HOT 2
- How to exclude client side only packages? HOT 1
- Fatal issue with deps ordering in package.json HOT 1
- Scripts loaded twice HOT 1
- Any way to inspect generated webpack config? HOT 1
- Requests fail with cookie array in response HOT 2
- Initializer provides no value for this binding element and the binding element has no default value
- Error on run vue add @akryum/vue-cli-plugin-ssr
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
š Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ššš
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ā¤ļø Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vue-cli-plugin-ssr.