You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TypeError: Cannot set property req of [object Object] which has only a getter
at Server._setupRequest (/home/runner/work/node-restify/node-restify/lib/server.js:1282:13)
at Server._onRequest (/home/runner/work/node-restify/node-restify/lib/server.js:967:10)
at Http2SecureServer.emit (node:events:378:20)
at Http2SecureServer.EventEmitter.emit (node:domain:532:15)
at Http2SecureServer.onServerStream (node:internal/http2/compat:870:10)
at Http2SecureServer.emit (node:events:378:20)
at Http2SecureServer.EventEmitter.emit (node:domain:532:15)
at ServerHttp2Session.sessionOnStream (node:internal/http2/core:2930:19)
at ServerHttp2Session.emit (node:events:378:20)
at ServerHttp2Session.EventEmitter.emit (node:domain:532:15)
How often does it reproduce? Is there a required condition?
Every time
What is the expected behavior?
The code should not break on a semver-minor
What do you see instead?
An error is thrown
Additional information
This happens because getters are not assignable on strict mode. We can't revert the change because that would also be a breaking change, so we have two options:
Change it from a getter to a normal property, so that user code doesn't break. We can go back to a getter on v16
Leave as is, assuming that users shouldn't be assigning to the response object anyway and because v15 is not an LTS version, and then add a note to the changelogs that this was an accidental breaking change that won't be reverted
If we go with the latter we might want to discuss making all properties on req/res non-assignable (which IMO is not desirable).
@mmarchini do you think this is just an unfortunate breakage because due the popularity of theres.req = req pattern?
Should we start to treat every addition of a non-writable property to a public object as semver-major?
Activity
ghermeto commentedon Mar 11, 2021
cc/ @nodejs/web-server-frameworks
targos commentedon Mar 12, 2021
@mmarchini do you think this is just an unfortunate breakage because due the popularity of the
res.req = reqpattern?Should we start to treat every addition of a non-writable property to a public object as semver-major?
mcollina commentedon Mar 12, 2021
I think so, yes. It's very easy to support backward compatible behavior anyway.
mmarchini commentedon Mar 12, 2021
I agree with @mcollina, it's easy enough to ensure backward compatible behavior that we should avoid breaking it whenever possible.
Ethan-Arrowood commentedon Mar 12, 2021
I'm +1 for treating it as semver major since if someone is currently assigning to the property, making it readonly will break their code
http2: make res.req a normal property
http2: make res.req a normal property
http2: make res.req a normal property