MERN

⌘K
  1. Home
  2. Docs
  3. MERN
  4. Document crud file upload

Document crud file upload

Install Multer

npm install multer

মডেল বানাই

models/document.js

const { DataTypes } = require('sequelize');
const sequelize = require('../config/db');

const Document = sequelize.define('Document', {
  title: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  file_path: {
    type: DataTypes.STRING,
    allowNull: false,
  },
});

module.exports = Document;

Controllers বানাই

controllers/documentController.js

const fs = require('fs');
const multer = require('multer');
const Document = require('../models/document');

// Multer configuration
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, 'src/uploads/'); // Destination folder for uploaded files
  },
  filename: (req, file, cb) => {
    cb(null, Date.now() + '-' + file.originalname); // File name in the destination folder
  },
});

const upload = multer({ storage: storage });

// Get all documents
exports.getAllDocuments = async (req, res) => {
  try {
    const documents = await Document.findAll();
    res.json(documents);
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

// Create a new document with file upload
exports.createDocument = upload.single('file'), async (req, res) => {
  try {
    const { title } = req.body;
    const file = req.file;

    if (!file) {
      return res.status(400).json({ error: 'File is required' });
    }

    const document = await Document.create({ title, filePath: file.path });
    res.json({ document, message: 'Document created successfully' });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

// Update a document
exports.updateDocument = async (req, res) => {
  try {
    const { id } = req.params;
    const { title } = req.body;
    const document = await Document.findByPk(id);

    if (!document) {
      return res.status(404).json({ message: 'Document not found' });
    }

    document.title = title;
    await document.save();

    res.json({ document, message: 'Document updated successfully' });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

// Delete a document
exports.deleteDocument = async (req, res) => {
  try {
    const { id } = req.params;
    const document = await Document.findByPk(id);

    if (!document) {
      return res.status(404).json({ message: 'Document not found' });
    }

    // Remove the file from the uploads folder
    fs.unlinkSync(document.filePath);

    await document.destroy();
    res.json({ message: 'Document deleted successfully' });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
};

Route

routes/documentRoutes.js

const express = require('express');
const documentController = require('../controllers/documentController');
const { authenticateJWT } = require('../middleware/authMiddleware');

const router = express.Router();

// Use the authentication middleware for all document routes
router.use(authenticateJWT);

router.get('/', documentController.getAllDocuments);
router.post('/', documentController.createDocument);
router.put('/:id', documentController.updateDocument);
router.delete('/:id', documentController.deleteDocument);

module.exports = router;

index.js

const documentRoutes = require('./routes/documentRoutes');
app.use('/api/documents', documentRoutes);

How can we help?