Skip to content

Commit 649ec96

Browse files
committed
Standardize response handling and header checks in routes
Merge request body into responses and only set Location when present for create, update, and overwrite routes; send JSON with chained status/.json. Use res.sendStatus(204) and correct error forwarding in delete routes. Replace hasOwnProperty checks with Object.hasOwn and guard header access (headers.get) to avoid runtime errors. These changes make responses consistent, safer against missing properties, and prevent sending empty Location headers.
1 parent 27c61ad commit 649ec96

4 files changed

Lines changed: 22 additions & 18 deletions

File tree

routes/create.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ router.post('/', checkAccessToken, async (req, res, next) => {
2929
})
3030
// Send RERUM error responses to error-messenger.js
3131
if (errored) return next(result)
32-
res.setHeader("Location", result["@id"] ?? result.id)
33-
res.status(201)
34-
res.json(result)
32+
const location = result?.["@id"] ?? result?.id
33+
const responseBody = { ...req.body, ...(result ?? {}) }
34+
if (location) {
35+
res.setHeader("Location", location)
36+
}
37+
res.status(201).json(responseBody)
3538
}
3639
catch (err) {
3740
next(err)
@@ -42,4 +45,4 @@ router.all('/', (req, res, next) => {
4245
res.status(405).send("Method Not Allowed")
4346
})
4447

45-
export default router
48+
export default router

routes/delete.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,8 @@ router.delete('/', checkAccessToken, async (req, res, next) => {
3232
throw err
3333
})
3434
// Send RERUM error responses to error-messenger.js
35-
if (errored) return next(results)
36-
res.status(204)
37-
res.send(result)
35+
if (errored) return next(result)
36+
res.sendStatus(204)
3837
}
3938
catch (err) {
4039
next(err)
@@ -62,9 +61,8 @@ router.delete('/:id', async (req, res, next) => {
6261
throw err
6362
})
6463
// Send RERUM error responses to error-messenger.js
65-
if (errored) return next(results)
66-
res.status(204)
67-
res.send(result)
64+
if (errored) return next(result)
65+
res.sendStatus(204)
6866
}
6967
catch (err) {
7068
next(err)

routes/overwrite.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ router.put('/', checkAccessToken, async (req, res, next) => {
2525
}
2626

2727
// Pass through If-Overwritten-Version header if present
28-
const ifOverwrittenVersion = req.headers.hasOwnProperty('if-overwritten-version') ? req.headers['if-overwritten-version'] : null
28+
const ifOverwrittenVersion = Object.hasOwn(req.headers, 'if-overwritten-version') ? req.headers['if-overwritten-version'] : null
2929
if (ifOverwrittenVersion !== null) {
3030
overwriteOptions.headers['If-Overwritten-Version'] = ifOverwrittenVersion
3131
}
3232

3333
// Check for __rerum.isOverwritten in body and use as If-Overwritten-Version header
34-
const isOverwrittenValue = req.body?.__rerum?.hasOwnProperty("isOverwritten") ? req.body.__rerum.isOverwritten : null
34+
const isOverwrittenValue = Object.hasOwn(req.body?.__rerum ?? {}, "isOverwritten") ? req.body.__rerum.isOverwritten : null
3535
if (isOverwrittenValue !== null) {
3636
overwriteOptions.headers['If-Overwritten-Version'] = isOverwrittenValue
3737
}
@@ -42,7 +42,7 @@ router.put('/', checkAccessToken, async (req, res, next) => {
4242
.then(async rerum_res=>{
4343
if (rerum_res.ok) return rerum_res.json()
4444
errored = true
45-
if (rerum_res.headers.get("Content-Type").includes("json")) {
45+
if ((rerum_res.headers?.get("Content-Type") ?? "").includes("json")) {
4646
// Special handling. This does not go through to error-messenger.js
4747
if (rerum_res.status === 409) {
4848
const currentVersion = await rerum_res.json()
@@ -58,11 +58,11 @@ router.put('/', checkAccessToken, async (req, res, next) => {
5858
if (errored) return next(response)
5959
const result = response
6060
const location = result?.["@id"] ?? result?.id
61+
const responseBody = { ...req.body, ...(result ?? {}) }
6162
if (location) {
6263
res.setHeader("Location", location)
6364
}
64-
res.status(200)
65-
res.json(result)
65+
res.status(200).json(responseBody)
6666
}
6767
catch (err) {
6868
next(err)

routes/update.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,12 @@ router.put('/', checkAccessToken, async (req, res, next) => {
3434
})
3535
// Send RERUM error responses to error-messenger.js
3636
if (errored) return next(result)
37-
res.setHeader("Location", result["@id"] ?? result.id)
38-
res.status(200)
39-
res.send(result)
37+
const location = result?.["@id"] ?? result?.id
38+
const responseBody = { ...req.body, ...(result ?? {}) }
39+
if (location) {
40+
res.setHeader("Location", location)
41+
}
42+
res.status(200).json(responseBody)
4043
}
4144
catch (err) {
4245
next(err)

0 commit comments

Comments
 (0)