fastify / fastify/fastify-http-proxy
Unable to use http-proxy for all routes (/*) with @fastify/cors plugin
- Dominant language
- JavaScript
- Stars
- 395
- Forks
- 108
- Avg merge
- 1d 19h
- Merged PRs (30d)
- 2
Description
### Prerequisites
- [X] I have written a descriptive issue title
- [X] I have searched existing issues to ensure the bug has not already been reported
### Fastify version
4.5.3
### Plugin version
9.2.1
### Node.js version
16.15.1
### Operating system
macOS
### Operating system version (i.e. 20.04, 11.3, 10)
13.4
### Description
I need to allow CORS for my Fastify application. To achieve this I'm using `@fastify/cors` package with following settings:
```
fastify.register(cors, {
origin: '*',
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
})
```
if I register the http-proxy route for something like this:
```
.register(require('@fastify/http-proxy'), {
upstream: 'https://some_url',
})
```
I will get an error:
```
/node_modules/find-my-way/index.js:292
throw new Error(`Method '${method}' already declared for route '${path}' with constraints '${JSON.stringify(constraints)}'`)
^
Error: Method 'OPTIONS' already declared for route '/*' with constraints '{}'
at Router._on (/node_modules/find-my-way/index.js:292:13)
at Router.on (/node_modules/find-my-way/index.js:136:10)
at Object.addNewRoute (/node_modules/fastify/lib/route.js:262:16)
at Object.route (/node_modules/fastify/lib/route.js:194:19)
at Object._route [as route] (/node_modules/fastify/fastify.js:268:27)
at fastifyHttpProxy (/node_modules/@fastify/http-proxy/index.js:291:11)
at Plugin.exec (/node_modules/avvio/plugin.js:130:19)
at Boot.loadPlugin (/node_modules/avvio/plugin.js:272:10)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
```
Probably because of this part of the lib:
```
fastify.route({
url: '/*',
method: opts.httpMethods || httpMethods,
preHandler,
config: opts.config || {},
constraints: opts.constraints || {},
handler
```
### Steps to Reproduce
Register `fastify/cors` with `fastify/fastify-http-proxy` for all routes
```
fastify
.register(cors, {
origin: '*',
methods: ['GET', 'POST'],
allowedHeaders: ['Content-Type', 'Authorization'],
credentials: true,
})
.register(require('@fastify/http-proxy'), {
upstream: 'https://some_url',
})
```
### Expected Behavior
There is a way to enable cors on all routes for http-proxy plugin
PS:
I tried something like:
```
.register(require('@fastify/http-proxy'), {
upstream: process.env.PUBLIC_API_URL,
onResponse: (request: FastifyRequest, reply: FastifyReply) => {
reply.header('Access-Control-Allow-Origin', '*')
reply.header('Access-Control-Allow-Methods', '*')
reply.header('Access-Control-Allow-Headers', '*')
},
})
```
but it didn't do the trick for me
Contributor guide
Assessment
This issue has not been assessed yet.