Enhance socket management and error handling in template events

- Increased the maximum HTTP buffer size for the Socket.IO server to improve data handling capabilities.
- Added error handling in `handlePreviewTemplateEvent` and `handleRenderTemplatePDFEvent` methods to log errors and return error messages through callbacks.
- Implemented a check for unknown object types in the `TemplateManager` to prevent processing errors and return appropriate error messages.
This commit is contained in:
Tom Butcher 2026-07-28 01:50:24 +01:00
parent 00198b8199
commit 8c445a7392
3 changed files with 36 additions and 14 deletions

View File

@ -23,6 +23,7 @@ export class SocketManager {
// Create Socket.IO server - CORS applies to HTTP long-polling transport // Create Socket.IO server - CORS applies to HTTP long-polling transport
const allowedOrigins = config.server.corsOrigins || ['*']; const allowedOrigins = config.server.corsOrigins || ['*'];
const io = new Server(server, { const io = new Server(server, {
maxHttpBufferSize: 1e8,
cors: { cors: {
origin: (origin, callback) => { origin: (origin, callback) => {
// Allow requests with no origin (e.g. same-origin, Postman, native apps) // Allow requests with no origin (e.g. same-origin, Postman, native apps)

View File

@ -306,24 +306,42 @@ export class SocketUser {
} }
async handlePreviewTemplateEvent(data, callback) { async handlePreviewTemplateEvent(data, callback) {
try {
const result = await this.templateManager.renderTemplate( const result = await this.templateManager.renderTemplate(
data._id, data._id,
data.content, data.content,
data.testObject, data.testObject,
data.scale data.scale
); );
if (typeof callback === 'function') {
callback(result); callback(result);
} }
} catch (err) {
logger.error('Preview template event error:', err);
if (typeof callback === 'function') {
callback({ error: err.message });
}
}
}
async handleRenderTemplatePDFEvent(data, callback) { async handleRenderTemplatePDFEvent(data, callback) {
try {
const result = await this.templateManager.renderPDF( const result = await this.templateManager.renderPDF(
data._id, data._id,
data.content, data.content,
data.object, data.object,
1 1
); );
if (typeof callback === 'function') {
callback(result); callback(result);
} }
} catch (err) {
logger.error('Render template PDF event error:', err);
if (typeof callback === 'function') {
callback({ error: err.message });
}
}
}
async handleGenerateHostOtpEvent(data, callback) { async handleGenerateHostOtpEvent(data, callback) {
const result = await generateHostOTP(data._id); const result = await generateHostOTP(data._id);
callback(result); callback(result);

View File

@ -407,6 +407,9 @@ export class TemplateManager {
} else { } else {
const objectType = documentTemplate?.objectType; const objectType = documentTemplate?.objectType;
const model = getModelByName(objectType); const model = getModelByName(objectType);
if (model == null) {
return { error: `Unknown object type: ${objectType}` };
}
const defaultKeys = Object.keys(model.schema.obj); const defaultKeys = Object.keys(model.schema.obj);
const defaultValues = {}; const defaultValues = {};
for (const key of defaultKeys) { for (const key of defaultKeys) {