Heim > Web-Frontend > js-Tutorial > So erstellen Sie die NodeJS Express REST API zum Hochladen von Bildern mit Multer (PostgreSQL)

So erstellen Sie die NodeJS Express REST API zum Hochladen von Bildern mit Multer (PostgreSQL)

Mary-Kate Olsen
Freigeben: 2025-01-25 00:32:12
Original
638 Leute haben es durchsucht

Erstellen Sie eine leistungsstarke Bild-Upload-API: mit Node.js, Multer und PostgreSQL

In diesem Artikel erfahren Sie, wie Sie mit Node.js, Multer und PostgreSQL eine einfache und benutzerfreundliche API erstellen, um Funktionen zum Hochladen einzelner und mehrerer Bilder zu implementieren. Das Hochladen von Bildern und die Datenbankspeicherung können problemlos und ohne komplizierte Konfiguration durchgeführt werden.

Voraussetzungen:

  • Node.js und PostgreSQL sind installiert und konfiguriert.
  • Vertraut mit den Grundfunktionen von Node.js und PostgreSQL.
  • Postbote für API-Tests.

Projekteinstellungen:

  1. Erstellen Sie ein Projektverzeichnis und initialisieren Sie es:

    <code class="language-bash">mkdir imageUpload
    cd imageUpload
    npm init -y</code>
    Nach dem Login kopieren
  2. Abhängigkeiten installieren:

    <code class="language-bash">npm install express multer body-parser pg</code>
    Nach dem Login kopieren
  3. Verzeichnisstruktur erstellen:

    <code>imageUpload/
    ├── index.js
    ├── images/
    ├── db/
    │   └── db.js
    └── routes/
        └── image_routes.js
    └── controllers/
        └── upload.js</code>
    Nach dem Login kopieren
  4. PostgreSQL-Datenbank und Benutzertabellen erstellen:

    <code class="language-sql">CREATE DATABASE uploader;
    CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, icon VARCHAR NOT NULL);</code>
    Nach dem Login kopieren

Code-Implementierung:

  1. Datenbankverbindung (db.js):

    <code class="language-javascript">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;</code>
    Nach dem Login kopieren
  2. Express Server (index.js):

    <code class="language-javascript">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}`);
    });</code>
    Nach dem Login kopieren
  3. Routendefinition (image_routes.js):

    <code class="language-javascript">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);
    };</code>
    Nach dem Login kopieren
  4. Bild-Upload-Controller (upload.js):

    <code class="language-javascript">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: '图片上传失败' });
        }
    };
    </code>
    Nach dem Login kopieren

Test:

Verwenden Sie Postman, um eine POST-Anfrage an /upload/single oder /upload/multiple zu senden und die Bilddatei und die Benutzernamensdaten anzuhängen.

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

Bitte beachten Sie, dass YOUR_PASSWORD im obigen Code durch Ihr PostgreSQL-Datenbankkennwort ersetzt werden muss. Die Fehlerbehandlung wurde verbessert, um klarere Fehlermeldungen bereitzustellen. Auch die Überprüfung des Bildformats ist strenger. Denken Sie abschließend daran, den Bilderordner images zugänglich zu machen.

Diese überarbeitete Antwort bietet eine robustere und sicherere Lösung, einschließlich Fehlerbehandlung und verbesserter Klarheit. Denken Sie daran, Platzhalter wie YOUR_PASSWORD durch Ihre tatsächlichen Anmeldeinformationen zu ersetzen.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie die NodeJS Express REST API zum Hochladen von Bildern mit Multer (PostgreSQL). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage