Spaces:
Runtime error
Runtime error
File size: 1,787 Bytes
abed4cc 5d38af1 e6227e8 587da90 abed4cc 5d38af1 587da90 e6227e8 b00a859 e6227e8 b00a859 e6227e8 2817b54 e6227e8 587da90 b00a859 e6227e8 b00a859 5d38af1 c9a97eb 587da90 5d38af1 587da90 5d38af1 587da90 0b62239 587da90 c9a97eb 5d38af1 587da90 5d38af1 587da90 5d38af1 587da90 abed4cc 5d38af1 abed4cc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
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: 45 * 1000, // 30 секунд
max: 1, // лимит: 1 запрос на IP
handler: function (req, res) {
return res.status(429).json({
error: "Слишком много запросов с этого IP, пожалуйста, попробуйте позже. (Лимит 1 генерация изображения в 45 секунд)"
});
}
});
app.use('/generate-image', generateImageLimiter);
// Применяем лимитер только к определенному маршруту
app.post('/generate-image', async (req, res) => {
const prompt = req.body.prompt;
const apiKey = req.body.api || openai_key;
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 ${apiKey}`,
'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}`);
}); |