>웹 프론트엔드 >JS 튜토리얼 >multer (postgresql)를 사용하여 이미지를 업로드하기 위해 Nodejs Express REST API를 빌드하는 방법

multer (postgresql)를 사용하여 이미지를 업로드하기 위해 Nodejs Express REST API를 빌드하는 방법

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-25 00:32:12606검색

Node.js, Multer 및 PostgreSQL을 사용하여 강력한 이미지 업로드 API 구축

이 기사에서는 Node.js, Multer 및 PostgreSQL을 사용하여 단일 및 다중 이미지 업로드 기능을 구현하는 간단하고 사용하기 쉬운 API를 구축하는 방법을 안내합니다. 복잡한 구성 없이 이미지 업로드와 데이터베이스 저장을 쉽게 완료할 수 있습니다.

전제 조건:

  • Node.js와 PostgreSQL이 설치 및 구성되었습니다.
  • Node.js 및 PostgreSQL의 기본 작업에 익숙합니다.
  • API 테스트를 위한 Postman.

프로젝트 설정:

  1. 프로젝트 디렉토리 생성 및 초기화:

    <code class="language-bash">mkdir imageUpload
    cd imageUpload
    npm init -y</code>
  2. 종속성 설치:

    <code class="language-bash">npm install express multer body-parser pg</code>
  3. 디렉터리 구조 만들기:

    <code>imageUpload/
    ├── index.js
    ├── images/
    ├── db/
    │   └── db.js
    └── routes/
        └── image_routes.js
    └── controllers/
        └── upload.js</code>
  4. PostgreSQL 데이터베이스 및 사용자 테이블 생성:

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

코드 구현:

  1. 데이터베이스 연결(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>
  2. 익스프레스 서버(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>
  3. 경로 정의(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>
  4. 이미지 업로드 컨트롤러(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>

테스트:

Postman을 사용하여 이미지 파일과 사용자 이름 데이터를 첨부하여 /upload/single 또는 /upload/multiple에 POST 요청을 보냅니다.

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

위 코드의 YOUR_PASSWORD를 PostgreSQL 데이터베이스 비밀번호로 바꿔야 한다는 점에 유의하세요. 더 명확한 오류 메시지를 제공하기 위해 오류 처리가 향상되었습니다. 이미지 형식 확인도 더욱 엄격해졌습니다. 마지막으로 이미지 폴더 images에 액세스할 수 있도록 설정하는 것을 잊지 마세요.

이 개정된 응답은 오류 처리 및 향상된 명확성을 포함하여 더욱 강력하고 안전한 솔루션을 제공합니다. YOUR_PASSWORD과 같은 자리 표시자를 실제 자격 증명으로 바꾸십시오.

위 내용은 multer (postgresql)를 사용하여 이미지를 업로드하기 위해 Nodejs Express REST API를 빌드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.