Maison >interface Web >js tutoriel >Comment créer l'API REST NodeJS Express pour télécharger une image à l'aide de Multer (PostgreSQL)
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 :
Paramètres du projet :
Créez un répertoire de projet et initialisez-le :
<code class="language-bash">mkdir imageUpload cd imageUpload npm init -y</code>
Installer les dépendances :
<code class="language-bash">npm install express multer body-parser pg</code>
Créer une structure de répertoires :
<code>imageUpload/ ├── index.js ├── images/ ├── db/ │ └── db.js └── routes/ └── image_routes.js └── controllers/ └── upload.js</code>
Créer une base de données PostgreSQL et des tables utilisateur :
<code class="language-sql">CREATE DATABASE uploader; CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(50) NOT NULL, icon VARCHAR NOT NULL);</code>
Mise en œuvre du code :
Connexion à la base de données (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>
Serveur Express (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>
Définition de l'itinéraire (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>
Contrôleur de téléchargement d'images (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>
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.
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!