Arsitektur API Awal. Berisi kumpulan modul, layanan, dan konfigurasi dasar dan wajib dimiliki.
Gunakan Express Middlewares untuk membagi fungsionalitas dan memisahkan bagian-bagian secara logis. Setiap router/titik akhir mungkin memiliki rantai middleware untuk memvalidasi data, memuat data dari sumber data, memetakan data, memeriksa izin, dan menjalankan logika bisnis utama.
Setiap fungsi Middleware harus memiliki nama yang sama di seluruh rangkaian rantai.
Contoh: Jika permintaan baru proses pembuatan pengguna melewati beberapa fungsi middleware, semuanya harus memiliki nama yang sama ( createOne(req, res, next)
)
* Pengecualian: middleware 'pembantu' yang tidak terkait
Contoh:
appRoute.get('/:userId',
authMiddleware.isAuthenticated,
acl.getOne,
validator.getOne,
loader.getOne,
controller.getOne,
);
./app/middlewares/
Item berantai untuk menjalankan fungsi spesifiknya sendiri.
Memeriksa apakah permintaan saat ini dapat mencapai logika bisnis. Lapisan ini dapat memeriksa apakah pengguna yang masuk memiliki izin untuk melakukan permintaan ini.
Contoh:
async getOne(req, res, next) {
if (mainAcl.isAdmin(req.user)) {
return next();
}
const userIdRequested = req.params.userId;
const userIdCurrent = req.user._id.toString();
if (userIdRequested === userIdCurrent) {
return next();
}
return next(new Forbidden());
},
Memetakan data Keluar/Masuk untuk diproses lebih lanjut dengan fungsi lain.
Contoh:
updateOne(req, res, next) {
delete req.body.password;
delete req.body.confirm_password;
return next();
},
Memvalidasi data yang masuk sesuai aturan yang dipasang untuk mencegah penanganan data yang tidak valid.
Contoh:
deleteOne(req, res, next) {
req.assert('userId', 'Valid user id should be provided').notEmpty().isMongoId();
mainValidator.handleValidationResult(mainValidator.validateErrorsSync(req), res, next);
},
Memuat/Diperlukan oleh entitas/objek logika bisnis dari sumber data yang tersedia. Sistem dapat mengambil pengguna atau entitas terkait dari database atau memproses data.
Menyimpan dan meneruskan entitas yang dimuat dalam objek khusus di dalam objek req
(permintaan). Layanan Entity Loader harus digunakan untuk mengirim semua entitas dan meneruskan objek permintaan.
Contoh:
async getOne(req, res, next) {
try {
const userFound = await UserService.findOne({ query: { _id: req.params.userId }, options: { lean: true } });
if (!mainHelper.isObjectValid(userFound)) {
throw new NotFound('user not found');
}
MainLoader.setEntities(req, { user: userFound });
return next();
} catch (err) {
return next(err);
}
},
./app/services/
Layanan menjalankan fungsionalitas fokus tunggal yang akan dipanggil di dalam aplikasi untuk menangani logika bisnis.
./commands
Kunjungi https://nodejs.org untuk detail instalasi.
Node Package Manager, harus dibundel dengan node.js.
Instal MongoDB https://docs.mongodb.com/manual/installation/
$ git clone <package url> .
$ npm install
config/env/env.local
dan salin data dari config/env/env.local_example
config/env/.env.test
dan salin data dari config/env/.env.test_example
$ npm run start:[environment]
Contoh: $ npm run start:local