Handle errors in print requests

This commit is contained in:
René Preuß
2024-03-04 10:06:13 +01:00
parent 2c9b08a511
commit ef4bb777f2
2 changed files with 50 additions and 18 deletions

View File

@@ -86,7 +86,7 @@ curl --location 'http://127.0.0.1:1903/printers/PM-241-BT%20(Network)/print' \
--form 'copies="1"' --form 'copies="1"'
``` ```
#### Response: #### Successful Response:
> On windows the response does not return any real job id. Instead, it returns a 0. > On windows the response does not return any real job id. Instead, it returns a 0.
@@ -97,3 +97,22 @@ curl --location 'http://127.0.0.1:1903/printers/PM-241-BT%20(Network)/print' \
] ]
} }
``` ```
#### Error Responses:
If the request is not successful, the response will contain an error message and an error id.
```json
{
"error": "Missing PDF file",
"error_id": "missing_pdf"
}
```
Here is a list of possible error ids (but not all of them are implemented yet):
| Error ID | Description |
|---------------|-------------------------------|
| missing_pdf | Missing PDF file |
| invalid_label | Invalid label format |
| null | Unsuccessful print job: {...} |

View File

@@ -19,7 +19,9 @@ app.get('/', (req, res) => {
}) })
app.get('/printers', async (req, res) => { app.get('/printers', async (req, res) => {
try {
const printers = await getPrinters() const printers = await getPrinters()
return res.json(printers.map(printer => { return res.json(printers.map(printer => {
return { return {
default: false, default: false,
@@ -28,6 +30,10 @@ app.get('/printers', async (req, res) => {
name: printer.printer || printer.name, name: printer.printer || printer.name,
} }
})) }))
} catch (e) {
console.error('Error getting printers', e)
return res.json([])
}
}) })
app.post('/printers/:printer/print', upload.single('file'), async (req, res) => { app.post('/printers/:printer/print', upload.single('file'), async (req, res) => {
@@ -36,6 +42,7 @@ app.post('/printers/:printer/print', upload.single('file'), async (req, res) =>
// query: user-id: string, docType: label // query: user-id: string, docType: label
// form data: file: binary, copies: string, shipment-ids: string // form data: file: binary, copies: string, shipment-ids: string
try {
const fileToPrint = req.file.path const fileToPrint = req.file.path
const printJob = await print(fileToPrint, printer) const printJob = await print(fileToPrint, printer)
const jobId = getRequestId(printJob) const jobId = getRequestId(printJob)
@@ -43,7 +50,13 @@ app.post('/printers/:printer/print', upload.single('file'), async (req, res) =>
return res.json({ return res.json({
jobs: [jobId], jobs: [jobId],
}) })
} catch (e) {
console.error('Error printing', e)
return res.status(400).json({
error: 'Unsuccessful print job: ' + e.message,
error_id: null,
})
}
}) })
app.listen(port, () => { app.listen(port, () => {