Forum Comment Screening
Protecting forums and comment sections requires consistent filtering. By implementing moderation as an Express.js middleware, you ensure that no controller ever processes harmful content, keeping your database clean.
01. SETUP
Install dependencies:
npm install express @safecomms/sdk02. MIDDLEWARE LOGIC
Create `middleware/moderation.js` to encapsulate the screening logic:
const { SafeComms } = require('@safecomms/sdk');
// Initialize SDK
const safecomms = new SafeComms({ apiKey: process.env.SAFECOMMS_API_KEY });
/**
* Express Middleware for Content Screening
* @param {string} fieldName - The body field to check (e.g., 'comment', 'content')
*/
const screenContent = (fieldName) => {
return async (req, res, next) => {
try {
const content = req.body[fieldName];
if (!content) return next();
// > ANALYZE_REQ_BODY
const analysis = await safecomms.text.analyze({
content: content
});
// > FILTER_LOGIC
if (analysis.flagged) {
return res.status(400).json({
error: 'Content Rejected',
reason: 'Your content contains prohibited material.',
category: analysis.primaryCategory
});
}
// Attach analysis to request object for later use (e.g. analytics)
req.safecomms = analysis;
next();
} catch (error) {
console.error('> MIDDLEWARE_ERROR:', error);
next(error);
}
};
};
module.exports = screenContent;03. ROUTE APPLICATION
Apply the middleware to your POST endpoints:
const express = require('express');
const screenContent = require('./middleware/moderation');
const app = express();
app.use(express.json());
// Apply middleware to specific route
app.post('/api/comments', screenContent('comment'), (req, res) => {
// If we get here, content is safe
// db.saveComment(req.body.comment);
res.status(201).json({
success: true,
message: 'Comment posted successfully'
});
});
app.listen(3000, () => console.log('> SERVER_READY'));> BEST_PRACTICE
Don't just reject content—provide feedback. While this example returns a generic "Content Rejected" message, you can optionally allow users to appeal or edit their content based on the `category` returned.