...
| 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);
|
...