Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejs
themeEmacs
titleserver.js
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);

...