ホームページ > ウェブフロントエンド > jsチュートリアル > nodejs Express Rest APIを構築する方法Multer(PostgreSQL)を使用して画像をアップロードする

nodejs Express Rest APIを構築する方法Multer(PostgreSQL)を使用して画像をアップロードする

Mary-Kate Olsen
リリース: 2025-01-25 00:32:12
オリジナル
595 人が閲覧しました

強力な画像の作成API:node.js、Multer、およびpostgresqlを使用してください

この記事では、Node.js、Multer、およびPostgreSQLを使用して、シンプルで簡単なAPIを構築して、単一の写真と複数の写真のアップロード機能を実現する方法をガイドします。複雑な構成なしで、画像のアップロードとデータベースストレージを簡単に完了できます。

前提条件:

node.jsとpostgreSqlがインストールされ、構成されています。
  • node.jsおよびpostgreSqlの基本操作に精通しています。
  • 郵便配達員はAPIテストに使用されます。
  • プロジェクトの設定:

プロジェクトディレクトリを作成し、初期化:
  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>
    ログイン後にコピー
    postgreSQLデータベースとユーザーテーブルの作成:
  4. <code class="language-sql">CREATE DATABASE uploader;
    CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, icon VARCHAR NOT NULL);</code>
    ログイン後にコピー
    コードの実装:

データベース接続(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>
    ログイン後にコピー
  2. ルーティング定義(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>
    ログイン後にコピー
  3. uploadコントローラー(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>
    ログイン後にコピー
  4. テスト:

    郵便配達員を使用して、

    または
    <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>
    ログイン後にコピー
    に投稿リクエストを送信し、画像ファイルとユーザー名データを添付します。

上記のコードでは、PostgreSQLデータベースパスワードに置き換える必要があることに注意してください。 エラー処理が強化され、より明確なエラー情報が提供されました。 画像形式の確認も厳しいです。 最後に、画像フォルダーをアクセス可能に設定することを忘れないでください。

この改訂された応答は、エラー処理やの代替品を忘れずに、より堅牢で安全なソリューションを提供します

以上がnodejs Express Rest APIを構築する方法Multer(PostgreSQL)を使用して画像をアップロードするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート