...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
const express = require('express'); const axios = require('axios'); const bodyParser = require('body-parser'); const DALLE_URL = ''; // API URL const DALLE_API_KEY = ''; // API KEY const app = express(); const router = express.Router(); router.post('/request', (request, response) => { const bodyData = request.body; requestDalle(response, bodyData) .then(() => response.end()) .catch((error) => response.status(error.status).json(error).end()); }); /** * DALL·E 서버로 요청을 합니다. * @param {Object} body 전송할 Data Object * @param {Response} res 클라이언트 응답 객체 * @returns {Promise} */ function requestDALLEServer(res, body) { const source = axios.CancelToken.source(); const url = DALLE_URL; return new Promise((resolve, reject) => { try { axios.post(url, body, { headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${DALLE_API_KEY}` }, responseType: 'stream', cancelToken: source.token }).then(response => { // 응답 스트림을 클라이언트에 파이프 response.data.pipe(res); }).catch(error => { // 요청 중 에러가 발생한 경우 reject({ status: error.response ? error.response.status : 500, message: error.message }); }); // 클라이언트의 연결이 끊어진 경우 요청을 취소 res.on(res.on('close', () => { source.cancel('요청을 취소합니다.'); // 클라이언트의 연결이 끊어진 경우, Promise를 완료 resolve(); }); } catch (e) { // 예외 발생 시 reject 호출 reject(e); } }); } app.use(bodyParser.json()); app.use('/', router); app.listen(8080); |
...