Rumah > hujung hadapan web > tutorial js > Bagaimana untuk membina API REST NodeJS Express untuk Muat Naik Imej menggunakan Multer(PostgreSQL)

Bagaimana untuk membina API REST NodeJS Express untuk Muat Naik Imej menggunakan Multer(PostgreSQL)

Mary-Kate Olsen
Lepaskan: 2025-01-25 00:32:12
asal
593 orang telah melayarinya

Bina API Muat naik gambar yang kuat: Gunakan node.js, multer, dan postgresql

Artikel ini akan membimbing anda cara menggunakan Node.js, Multer, dan PostgreSQL untuk membina API yang mudah dan mudah untuk mencapai fungsi memuat naik gambar tunggal dan berganda. Anda boleh dengan mudah melengkapkan muat naik gambar dan penyimpanan pangkalan data tanpa konfigurasi kompleks.

Prasyarat:

    node.js dan PostgreSQL telah dipasang dan dikonfigurasi.
  • biasa dengan operasi asas Node.js dan PostgreSQL.
  • Postman digunakan untuk ujian API.
Tetapan Projek:

    Buat direktori projek dan mulakan:
  1. <code class="language-bash">mkdir imageUpload
    cd imageUpload
    npm init -y</code>
    Salin selepas log masuk
  2. Ketergantungan pemasangan:
  3. <code class="language-bash">npm install express multer body-parser pg</code>
    Salin selepas log masuk
  4. Buat struktur direktori:
  5. <code>imageUpload/
    ├── index.js
    ├── images/
    ├── db/
    │   └── db.js
    └── routes/
        └── image_routes.js
    └── controllers/
        └── upload.js</code>
    Salin selepas log masuk
  6. Buat Pangkalan Data PostgreSQL dan Jadual Pengguna:
  7. <code class="language-sql">CREATE DATABASE uploader;
    CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, icon VARCHAR NOT NULL);</code>
    Salin selepas log masuk
  8. Pelaksanaan kod:

Sambungan pangkalan data (db.js):
  1. Express Server (index.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>
    Salin selepas log masuk
  2. definisi penghalaan (image_routes.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>
    Salin selepas log masuk
  3. pengawal muat naik (upload.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>
    Salin selepas log masuk
  4. <:> ujian:

    Gunakan Postman untuk menghantar permintaan pos ke
    <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>
    Salin selepas log masuk
    atau
  5. , dan lampirkan fail gambar dan data nama pengguna.

Sila ambil perhatian bahawa

dalam kod di atas perlu diganti dengan kata laluan pangkalan data PostgreSQL anda. Rawatan ralat telah dipertingkatkan, memberikan maklumat ralat yang lebih jelas. Pengesahan format gambar juga lebih ketat. Akhirnya, ingatlah untuk menetapkan folder gambar

untuk diakses. /upload/single /upload/multiple Respons yang disemak ini menyediakan penyelesaian yang lebih mantap dan selamat, termasuk pengendalian ralat dan kejelasan yang lebih baik

Atas ialah kandungan terperinci Bagaimana untuk membina API REST NodeJS Express untuk Muat Naik Imej menggunakan Multer(PostgreSQL). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan