Maison > interface Web > js tutoriel > Comment créer l'API REST NodeJS Express pour télécharger une image à l'aide de Multer (PostgreSQL)

Comment créer l'API REST NodeJS Express pour télécharger une image à l'aide de Multer (PostgreSQL)

Mary-Kate Olsen
Libérer: 2025-01-25 00:32:12
original
695 Les gens l'ont consulté

Créez une API puissante de téléchargement d'images : en utilisant Node.js, Multer et PostgreSQL

Cet article vous expliquera comment utiliser Node.js, Multer et PostgreSQL pour créer une API simple et facile à utiliser afin d'implémenter des fonctions de téléchargement d'images uniques et multiples. Le téléchargement d’images et le stockage de bases de données peuvent être facilement effectués sans configuration compliquée.

Prérequis :

  • Node.js et PostgreSQL sont installés et configurés.
  • Familier avec les opérations de base de Node.js et PostgreSQL.
  • Facteur pour les tests API.

Paramètres du projet :

  1. Créez un répertoire de projet et initialisez-le :

    mkdir imageUpload
    cd imageUpload
    npm init -y
    Copier après la connexion
  2. Installer les dépendances :

    npm install express multer body-parser pg
    Copier après la connexion
  3. Créer une structure de répertoires :

    <code>imageUpload/
    ├── index.js
    ├── images/
    ├── db/
    │   └── db.js
    └── routes/
        └── image_routes.js
    └── controllers/
        └── upload.js</code>
    Copier après la connexion
  4. Créer une base de données PostgreSQL et des tables utilisateur :

    CREATE DATABASE uploader;
    CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, icon VARCHAR NOT NULL);
    Copier après la connexion

Mise en œuvre du code :

  1. Connexion à la base de données (db.js) :

    const { Client } = require('pg');
    const client = new Client({
        user: 'postgres',
        host: 'localhost',
        database: 'uploader',
        password: 'YOUR_PASSWORD', // 请替换为您的数据库密码
        port: 5432,
    });
    client.connect().then(() => console.log("Connected to DB")).catch(err => console.error("数据库连接失败:", err.message));
    module.exports = client;
    Copier après la connexion
  2. Serveur Express (index.js) :

    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    const port = process.env.PORT || 4000;
    
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use('/images', express.static('images')); // 设置静态文件目录
    
    require('./routes/image_routes')(app);
    
    app.listen(port, () => {
        console.log(`服务器运行在端口 ${port}`);
    });
    Copier après la connexion
  3. Définition de l'itinéraire (image_routes.js) :

    const express = require('express');
    const uploadController = require('../controllers/upload');
    
    module.exports = (app) => {
        app.post('/upload/single', uploadController.upload.single('icon'), uploadController.uploadSingleImage);
        app.post('/upload/multiple', uploadController.upload.array('icon', 12), uploadController.uploadMultipleImage);
    };
    Copier après la connexion
  4. Contrôleur de téléchargement d'images (upload.js) :

    const multer = require('multer');
    const path = require('path');
    const client = require('../db/db');
    
    const storage = multer.diskStorage({
        destination: (req, file, cb) => cb(null, './images'),
        filename: (req, file, cb) => cb(null, `image-${Date.now()}${path.extname(file.originalname)}`),
    });
    
    const fileFilter = (req, file, cb) => {
        if (!file.originalname.match(/\.(jpg|jpeg|png)$/i)) {
            return cb(new Error('请上传 JPG, JPEG 或 PNG 格式的图片'), false);
        }
        cb(null, true);
    };
    
    exports.upload = multer({ storage, fileFilter });
    
    exports.uploadSingleImage = async (req, res) => {
        try {
            await client.query(`INSERT INTO users (name, icon) VALUES ('${req.body.name}', '${req.file.filename}')`);
            res.json({ statusCode: 200, status: true, message: '图片上传成功' });
        } catch (error) {
            console.error("图片上传失败:", error);
            res.status(500).json({ statusCode: 500, status: false, message: '图片上传失败' });
        }
    };
    
    exports.uploadMultipleImage = async (req, res) => {
        try {
            for (const file of req.files) {
                await client.query(`INSERT INTO users (name, icon) VALUES ('${req.body.name}', '${file.filename}')`);
            }
            res.json({ statusCode: 200, status: true, message: '所有图片上传成功' });
        } catch (error) {
            console.error("图片上传失败:", error);
            res.status(500).json({ statusCode: 500, status: false, message: '图片上传失败' });
        }
    };
    
    Copier après la connexion

Test :

Utilisez Postman pour envoyer une requête POST à ​​/upload/single ou /upload/multiple, en joignant le fichier image et les données du nom d'utilisateur.

How to build NodeJS Express REST API to Upload Image using Multer(PostgreSQL)

Veuillez noter que YOUR_PASSWORD dans le code ci-dessus doit être remplacé par le mot de passe de votre base de données PostgreSQL. La gestion des erreurs a été améliorée pour fournir des messages d'erreur plus clairs. La vérification du format d'image est également plus stricte. Enfin, pensez à rendre accessible le dossier images images.

Cette réponse révisée fournit une solution plus robuste et sécurisée, y compris une gestion des erreurs et une clarté améliorée. N'oubliez pas de remplacer les espaces réservés tels que YOUR_PASSWORD par vos informations d'identification réelles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal