Met betrekking tot referentiële integriteit bij verwijderingen, mits alle verwijderingsverzoeken door uw toepassing worden afgehandeld, kan deze worden afgehandeld door te controleren of ID niet bestaat in gerelateerde collecties voordat records worden verwijderd. Ik doe dit als volgt
CRUD-bewerkingen (we houden ons hier alleen bezig met verwijderen - merk op hoe ik een reeks objecten doorgeef, de verzameling en het veld dat moet worden vergeleken met de ID van het document (record) dat we verwijderen
const express = require('express')
const router = express.Router()
const iflexCRUD = require('../../lib/iflexCRUD')
const { UnitType } = require('../../models/Unittype')
const { Unit } = require('../../models/Unit')
iflexCRUD.create(router, '/', UnitType)
iflexCRUD.read(router, '/', UnitType, { sort: 'name' })
iflexCRUD.update(router, '/:id', UnitType)
iflexCRUD.deleteByID(router, '/:id', UnitType, [
{
model: Unit,
field: 'unittype'
}
])
iflexCRUD.delete(router, '/unittype/:unittype', UnitType)
module.exports = router
CRUD-verwijderingshandler Dit is een generieke verwijderingsverzoekhandler die ik gebruik voor CRUD-bewerkingen. Ik geef een reeks verzameling / veldwaarden door en controleer of er een enkele record is die overeenkomt met de ID van het document dat wordt verwijderd.
// CRUD-DELETE
iflexCRUD.deleteByID = (router, route, Collection, refs = []) => {
router.delete(route, async (req, res) => {
try {
let exception = false
//Enforce Referential Integrity for deletes - Deny when ID is used in any of refs collections
//Loop through any referenced files (first record) to ensure there are no other collections using this document
for (let i = 0; i < refs.length; i++) {
if (!exception) {
let refObj = {}
refObj[refs[0].field] = req.params.id
const result = await refs[i].model.findOne(refObj, (err, rec) => {})
exception = result !== null
}
}
// Process deletion of there are no exceptions
if (!exception) {
const doc = await Collection.deleteOne({ _id: req.params.id })
res.send(doc)
} else {
return res
.status(401)
.json(
'Document is already use in related collection - it cannot Delete!'
)
}
} catch (e) {
return res.status(401).json(e.message)
}
})
}