Can I extend the cors to the routers from app?

Viewed 315

I have two questions:

  • Can I use cors() once in my server.js instead of calling and use it in all my router files?
  • Can I require express once in my server.js instead of calling it in all my router files?

My server.js now has no problems to handle CORS like below but the app also handles the users router.

server.js handles requests to /

const cors = require('cors');
const express = require('express');
const users = require('./routers/users');
const app = express();
app.use(cors());
app.use('/api/v1/user', users); // Register the user router

routers/users.js handles requests to /users

const cors = require('cors'); // Required again
const express = require('express'); // Required again
const router = express.Router();
router.use(cors());

If I don't use router.use(cors()) I will receive an CORS on the browser when I access /api/v1/users

1 Answers
  1. Yes you need to use cors() only once for entire application.
  2. No you need to require express in each file if you are segregating your routes in separate files

Folder structure:

+ index.js
+ routers
  + users.js
  + server.js
+ controllers
  + user_controller.js

How your index.js file should look like:

const cors = require('cors');
const express = require('express');
const serverRoutes = require('./routers/server');

const app = express();

// Allow cross origin access.
app.use(cors());

app.use('/', serverRoutes);

How your server.js file should look like:

const router = require('express').Router();
const userRoutes = require('./users');


router.use('/api/v1/user', userRoutes); // Register the user router

module.exports = router;

How your user.js file should look like:

const router = require('express').Router();
const userController = require('../controllers/user_controller');

router.get('/', (req, res) => {
    userController.list(req, res); // or whatever your code is.
});

module.exports = router;
Related