I want to create API using Express TypeScript, but when I want to use cors it shown error like this:
No overload matches this call.
The last overload gave the following error.
Argument of type 'RequestHandler<any>' is not assignable to parameter of type 'PathParams'.
Type 'RequestHandler<any>' is missing the following properties from type '(string | RegExp)[]': length, pop, push, concat, and 26 more.
I installed the package using yarn add cors express and yarn add @types/cors @types/express
This is my code:
const api = express();
const main = express();
api.use(cors({ origin: true }));
main.use(bodyParser.json());
main.use(bodyParser.urlencoded({ extended: false }));
main.use("/api/v1", api);
export const webApi = functions.https.onRequest(main);
The error is in app.use(cors({ origin: true });
Specifying the path is optional for use, and the cors docs show exactly what you did as a valid example. IOW, your code is great! There's no problem there.
There was recently a change to the express type definitions. It seems like there are two sets: @types/express and @types/express-serve-static-core. The former depends on the latter, and there seems to be some breaking changes in express-serve-static-core that @types/express hasn't quite caught up with yet.
In that thread, a couple of workarounds are proposed.
You can pin the version of @types/express in your package.json to version 4.17.0. Or you can disable library checking with the Typescript compiler's skipLibCheck flag.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With