Spaces:
Running
Running
File size: 1,703 Bytes
abed4cc 5d38af1 e6227e8 587da90 abed4cc 5d38af1 587da90 e6227e8 5d38af1 e6227e8 587da90 e6227e8 5d38af1 587da90 5d38af1 587da90 5d38af1 587da90 0b62239 587da90 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 |
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}`);
}); |