File size: 1,785 Bytes
abed4cc
587da90
5d38af1
587da90
abed4cc
5d38af1
 
587da90
 
5d38af1
587da90
5d38af1
 
3306e94
587da90
 
80ec20e
587da90
5d38af1
 
 
587da90
5d38af1
 
 
587da90
5d38af1
 
587da90
e2c66fb
15e2d3c
e2c66fb
 
15e2d3c
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}`);
});