Manajemen Routing Mudah di Express.js

 

Photo by Javier Allegue Barros on Unsplash

Permasalahan

Routing di Express.js sangatlah mudah, namun adakalanya routing menjadi pelik dan sangat merepotkan ketika endpoint API semakin banyak sehingga deklarasi routing menjadi sangat banyak dalam 1 file. Belum lagi repotnya melakukan prefix version secara manual pada setiap routing.

Sebagai contoh permasalahan seperti dibawah ini :

  1. Mendeklarasikan route dari semua controller di satu file routing
src
├── app.js
├── controllers
│ ├── resource1.js
│ └── resource2.js
└── routes
└── index.js
// index.js
const express = require('express');
const router = express.Router();
// Import controller
const resourceOneController = require('/controllers/resource1');
const resourceTwoController = require('/controllers/resource2');


// Resource 1
router.get('/resource-1/', resourceOneController.get);
router.get('/resource-1/:id', resourceOneController.getOne);
router.post('/resource-1/:id', resourceOneController.post);
router.put('/resource-1/:id', resourceOneController.put);
router.delete('/resource-1/:id', resourceOneController.delete);
// Resource 2
router.get('/resource-2/', resourceTwoController.get);
router.get('/resource-2/:id', resourceTwoController.getOne);
router.post('/resource-2/', resourceTwoController.post);
router.put('/resource-2/:id', resourceTwoController.put);
router.delete('/resource-2/:id', resourceTwoController.delete);
// Resource 3 .. 50module.exports = router;

Lalu kita menggunakannya di file utama aplikasi, pada contoh kali ini app.js

// app.js
const express = require('express');
// Import file route
const routes require('./routes');
const app = express();// Load routes disini
app.use(routes);
...

Dengan cara ini kita bisa me-load route di app.js hanya satu kali, namun letak permasalahannya di file routing, yaitu untuk setiap resource dari controller harus dideklarasikan semuanya di satu file. Sehingga apabila perkembangan aplikasi semakin besar, file routing semakin susah untuk di atur.

2. Memisahkan routing untuk setiap resource dan me-load satu per satu di app.js

src
├── app.js
├── controllers
│ ├── resource1.js
│ └── resource2.js
└── routes
├── resource1.js
└── resource2.js
// app.js
const express = require('express');
// Import file route
const resource1 require('./resource1');
const resource2 require('./resource2');
const app = express();// Load routes disini
app.use('resource-1', resource1);
app.use('resource-1', resource2);
...

Untuk file routing dipisah menjadi 1 file per resource / flow

// resource1.js
const express = require('express');
const router = express.Router();
// Import controller
const resourceOneController = require('/controllers/resource1');

router.get('/', resourceOneController.get);
router.get('/:id', resourceOneController.getOne);
router.post('/', resourceOneController.post);
router.put('/:id', resourceOneController.put);
router.delete('/:id', resourceOneController.delete);
module.exports = router;

Dengan cara ini file routing lebih teroganisir dan lebih mudah untuk diatur ketika aplikasi semakin berkembang. Namun disini memiliki permasalahan jika file route semakin banyak maka kode load routes semakin banyak dan file app.js semakin tidak rapi. Bayangkan jika ada 10 lebih routes dan di-load di file app.js, tentu bukan hal yang menyenangkan untuk dilihat.

Terus bagaimana solusinya bos?

Solusinya kita akan menggunakan kelebihan dari kedua cara diatas, yaitu dengan hanya memanggil 1 file di app.js dan melakukan pemisahan file per resource / flow.

src
├── app.js
├── controllers
│ ├── resource1.js
│ └── resource2.js
└── routes
├── resource1.js
├── resource2.js
└── index.js

Disini file route dari resource akan di-load di file routes/index.js, file inilah yang akan dipanggil sekali di file app.js. Untuk contoh kodenya dapat dilihat dari contoh dibawah.

// app.js
const express = require(‘express’);
// Import file route
const routes require('./routes');
const app = express();// Load routes disini
app.use(routes);
module.exports = app;

Lalu file index.js di folder routes yang berfungsi sebagai penghubung utama dengan file app.js.

// routes/index.js
const express = require(‘express’);
// Import routes
const resource1 = require('resource1');
const resource2 = require('resource2');
const router = express.Router();router.use('/resource-1', resource1);
router.use('/resource-2', resource2);
module.exports = router;

Dan berikut file route dari resource/flow

// resource1.js
const express = require('express');
const router = express.Router();
// Import controller
const resourceOneController = require('/controllers/resource1');

router.get('/', resourceOneController.get);
router.get('/:id', resourceOneController.getOne);
router.post('/', resourceOneController.post);
router.put('/:id', resourceOneController.put);
router.delete('/:id', resourceOneController.delete);
module.exports = router;

Dengan cara ini routing lebih rapi dan mudah untuk diatur dan membuat file app.js tidak berantakan. Selain itu dengan cara ini lebih mudah untuk melakukan prefix version url pada routing, sehingga aplikasi lebih teratur.

Selesai

Sekian pembahan tentang routing di Express.js ini. Mungkin pembahasan ini sudah basi, namun tidak ada salahnya untuk dibahas. Semoga tulisan ini bermanfaat untuk yang membutuhkan. Kritik dan saran bisa di kolom komentar atau email ke syahdanfilsafan58@gmail.com

Terimakasih banyak.

DONASI VIA PAYPAL Bantu berikan donasi jika artikelnya dirasa bermanfaat. Donasi Anda membantu Admin untuk lebih giat lagi dalam membagikan template blog yang berkualitas. Terima kasih.
Newer Posts Newer Posts Older Posts Older Posts

More posts

Comments

Post a Comment