- [개인] 카스 전자 저울 연동 Packing List 자동 생성 프로그램 #8 | Node.js의 mdb-reader 모듈을 이용한 마이크로소프트 액세스 mdb 파일 읽기2022년 05월 30일 15시 11분 26초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
| 이슈
CommonJS, ES6
카스 전자저울은 마이크로소프트 액세스 mdb에 데이터를 저장한다. 따라서 xlsx 모듈로는 데이터를 읽어올 수가 없다. 구글링 해보니 Node.js에서 mdb-reader라는 모듈을 이용하면 mdb 파일의 데이터를 로딩할 수 있었다.
https://www.npmjs.com/package/mdb-reader
mdb-reader 모듈의 사용법은 크게 어렵지 않아 문제가 되질 않았다. 그렇다고 무난히 넘어가지도 않았는데 그 이유는 Node.js에서 모듈을 불러오는 방식 때문이었다. 이번에 mdb-reader 모듈을 사용하면서 알게 된 것인데 Node.js에서 모듈을 불러오는 방식은 CommonJS, ES6가 존재한다. 따라서 모듈을 불러올 때 CommonJS의 require과 ES6의 import를 사용할 수 있다. 그런데 문제는 이 둘을 혼용할 수 없다는 것이다.
Node.js에서 모듈을 불러오는 방식은 두 가지이며 이 둘을 혼용해 사용할 수 없다는 사실을 알지 못했을 때는 mdb-reader의 코드를 정확하게 복붙 했음에도 작동하지 않아 환장할 지경이었다. 고민과 검색을 통해 그 사실을 알고 package.json의 “type” 필드 값을-import로 모듈을 불러오는 ES6 방식인-“module”로 설정하고, 기존 require로 불러왔던 express, fs, cors 모듈도 import로 불러오도록 수정하여 비로소 mdb-reader를 사용할 수 있게 되었다.
아래 코드는 Node.js의 package.json의 type을 module로 설정한 코드이며, 이로서 es6 방식으로 module을 불러올 수 있다.
// package.json { ... "type": "module" }
아래는 Node.js의 app.js 파일로서 ES6 방식으로 모듈을 불러오는 코드이다. 주석 처리된 부분은 기존 CommonJS에서 모듈을 불러오는 방식이다.
// app.js import express from 'express' const app = express() import fs from 'fs' import cors from 'cors' import MDBReader from 'mdb-reader' // const express = require('express') // const app = express() // const fs = require('fs') // const cors = require('cors')
아래 코드는 Node.js에서 mdb-reader를 사용하기 위한 메서드이다.
// app.js app.get('/mdb', (req, res) => { const buffer = fs.readFileSync('./data/IDCMAINDB.mdb') // 카스 전자저울의 mdb파일 읽기 const reader = new MDBReader(buffer) reader.getTableNames() // ['Cats', 'Dogs', 'Cars'] const table = reader.getTable('TWEIGHT') table.getColumnNames() // ['id', 'name', 'color'] table.getData() // [{id: 5, name: 'Ashley', color: 'black'}, ...] res.send(table.getData()) })
사용자를 위한 mdb와 xls 구분 화면 표시
이제 카스 전자저울의 mdb 데이터를 바로 읽어 올 수 있게 되었다. mdb 파일을 엑셀 파일로 만들고 그 엑셀 파일을 업로드하는 과정이 필요 없어졌다. 그래도 엑셀 파일도 불러와 Packing List를 생성해야 하는 경우도 있지 않을까 하는 생각이 들었다. 그래서 엑셀 파일을 불러오는 기능도 그대로 두기로 했다. 그런데 사용자 입장에서는 mdb 파일을 불러왔는지 엑셀 파일을 불러왔는지 알기가 어려웠다. 그래서 [그림 1]과 같이 엑셀 파일을 불러왔을 경우에는 "엑셀 파일명"을 화면에 표시하여 보여주기로 했다.
| 다음 단계
이제 mdb와 엑셀 파일 모두 불러올 수 있게 되었다. 현재 프로젝트를 실행하면 mdb 파일의 경우에는 조회 버튼을 누르지 않더라도 자동으로 데이터를 읽어와 테이블을 그린다. 하지만 엑셀 파일을 불러오면 조회 버튼을 눌러야만-데이터를 가져와-테이블을 그린다. 무슨 이유인지는 모르겠지만 콘솔 로그를 찍어보면 함수를 직접 호출하면 [그림 2]와 같이 비어있는 객체만 오더라! 조회 버튼을 누르면 비로소 두 번째 로그와 같이 배열 값을 가지고 있는 객체가 출력된다. 따라서 조회 버튼을 누르지 않더라도 배열 값을 가진 객체를 가져올 수 있도록 처리하고자 한다.
728x90반응형'프로젝트 > [개인] Auto Packing List Manager' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글