...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
const express = require('express'); const bodyParser = require('body-parser'); const { fetchEventSource } = require('./modules/FetchEventSource'); const app = express(); const router = express.Router(); router.post('/request', (request, response) => { const url = 'https://ailab.synap.co.kr/sdk/ocr'; const apiKey = 'OCR_API_KEY'; const bodyData = Object.assign({}, request.body, { url: 'https://ailab.synap.co.kr/sdk/ocr', formData: { api_key: OCR_API_KEY, image: fs.createReadStream(imgPath), page_index: page, ...OCROption } }); const abortController = new AbortController(); (new Promise(async (resolve, reject) request.post(options).on('response', response => { tryconst {statusCode await fetchEventSource(url, {= _.get(response, 'statusCode'); const statusMessage = method: 'post',_.get(response, 'statusMessage'); if (statusCode headers:=== 200) { 'Content-Type': 'application/json'console.log('OCR 성공'); let body = []; }, body: JSON.stringify(bodyData), signal: abortController.signal, onopen: async (openResponseresponse.on('error', (err) => { throw err; if (openResponse.status === 200) { response}).on('closedata', (chunk) => { abortController.abort(); body.push(chunk); resolve(); }); response.set({ 'Cache-Control': 'no-cache', .on('end', () => { 'Connection': 'keep-alive', 'Content-Type': 'text/event-stream' // 전송 완료 const data }); response.flushHeaders()= JSON.parse(Buffer.concat(body).toString()); // 클라이언트에게 응답 return; } let error; try { const json = await openResponse.json(); return res.status(statusCode).json(data); error = json; } catch (e) { error = e; } else { error.status = openResponse.status; throw error; }, onclose: () => resolve(),console.log('OCR 실패', statusCode); onerror: (error)const error => { reject(error); new Error(statusMessage); throw error; }, onmessage: (message) => { if (!message.data || message.event === 'ping') { return.status = statusCode; // 클라이언트에게 오류 응답 } response.write('data:' + message.data + '\n\n'); }, }); } catch (e) { reject(ereturn res.status(statusCode).json({ error: statusMessage }); } })).then(() => response.end()) .catch((error) => response.status(error.status).json(error).end()); }); app.use(bodyParser.json()); app.use('/', router); app.listen(8080); |
...