File size: 1,790 Bytes
abed4cc
587da90
5d38af1
587da90
abed4cc
5d38af1
 
587da90
 
5d38af1
587da90
5d38af1
 
3306e94
587da90
 
80ec20e
587da90
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 axios = require('axios');
const rateLimit = require('express-rate-limit');

const app = express();
app.use(express.json());

const openai_key = process.env.OPENAI_KEY;

// Ограничение по IP-адресу: не более одной генерации в 30 секунд на один IP
const limiter = rateLimit({
  windowMs: 30 * 1000, // 30 секунд
  max: 1, // лимит на каждые 30 секунд
  message: 'Слишком много запросов с этого IP, пожалуйста, попробуйте позже. (Лимит 1 генерация в 30 секунд.',
});

app.use(limiter);

// Маршрут для генерации изображения с помощью DALL·E 3
app.post('/generate-image', async (req, res) => {
  const prompt = req.body.prompt;

  if (!prompt) {
    return res.status(400).json({ error: 'Требуется параметр "prompt".' });
  }

  try {
    // Запрос на API OpenAI для генерации изображения
    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}`);
});