Spaces:
Paused
Paused
| const express = require('express'); | |
| const rateLimit = require('express-rate-limit'); | |
| const axios = require('axios'); | |
| const app = express(); | |
| app.use(express.json()); | |
| const openai_key = process.env.OPENAI_KEY; | |
| // Определяем лимитер с задержкой 30 секунд на IP | |
| const generateImageLimiter = rateLimit({ | |
| windowMs: 30 * 1000, // 30 секунд | |
| max: 1, // лимит: 1 запрос на IP | |
| handler: function (req, res /*next*/) { | |
| return res.status(429).json({ | |
| error: "Слишком много запросов с этого IP, пожалуйста, попробуйте позже. (Лимит 1 генерация в 30 секунд)" | |
| }); | |
| } | |
| }); | |
| // Применяем лимитер только к определенному маршруту | |
| app.post('/generate-image', generateImageLimiter, async (req, res) => { | |
| const prompt = req.body.prompt; | |
| if (!prompt) { | |
| return res.status(400).json({ error: 'Требуется параметр "prompt".' }); | |
| } | |
| try { | |
| const response = await axios.post('https://api.openai.com/v1/images/generations', { | |
| prompt: prompt, | |
| n: 1, | |
| size: "1024x1024", | |
| quality: "hd", | |
| model: "dall-e-3", | |
| }, { | |
| headers: { | |
| 'Authorization': `Bearer ${openai_key}`, | |
| 'Content-Type': 'application/json', | |
| }, | |
| }); | |
| res.json(response.data); | |
| } catch (error) { | |
| console.error(error); | |
| res.status(500).json({ error: 'Произошла ошибка сервера при генерации изображения.' }); | |
| } | |
| }); | |
| const port = 7860; | |
| app.listen(port, () => { | |
| console.log(`API сервер запущен на порту ${port}`); | |
| }); |