Forum Comment Screening

EXPRESS.JSMIDDLEWAREWEB_API

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/sdk

02. 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.