modules/FetchEventSource.js
const { fetch, Headers, Request, Response } = require('fetch-undici'); if (!globalThis.fetch) { globalThis.fetch = fetch; globalThis.Headers = Headers; globalThis.Request = Request; globalThis.Response = Response; } module.exports = require('@waylaidwanderer/fetch-event-source');
server.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 options = { url: 'https://ailab.synap.co.kr/sdk/ocr', formData: { api_key: OCR_API_KEY, image: fs.createReadStream(imgPath), page_index: page, ...OCROption } }; request.post(options).on('response', response => { const statusCode = _.get(response, 'statusCode'); const statusMessage = _.get(response, 'statusMessage'); if (statusCode === 200) { console.log('OCR 성공'); let body = []; response.on('error', (err) => { throw err; }).on('data', (chunk) => { body.push(chunk); }).on('end', () => { // 전송 완료 const data = JSON.parse(Buffer.concat(body).toString()); // 클라이언트에게 응답 return res.status(statusCode).json(data); }); } else { console.log('OCR 실패', statusCode); const error = new Error(statusMessage); error.status = statusCode; // 클라이언트에게 오류 응답 return res.status(statusCode).json({ error: statusMessage }); } }); }); app.use(bodyParser.json()); app.use('/', router); app.listen(8080);