2014-05-22 1 views
3

내 nodejs/express 응용 프로그램에서 sqlite3 데이터베이스를 사용하고 있습니다. 익스프레스 서버를 시작할 때 .sql 파일을 sqlite로 가져 오려고합니다. node-sqlite3 패키지로 가져 오는 방법이 없기 때문에 exec 함수를 사용하여이 작업을 수행하려고합니다.nodejs exec를 통해 .sql 파일을 sqlite로 가져 오는 방법

내가 명령 줄에서 실행할 때 두 명령이 작동 :

고양이 db.sql | sqlite3를 mydb.db sqlite3를 mydb.db < db.sql

그러나, 나는 간부 기능의 mydb.db 파일이 생성됩니다 nodejs를 통해 이러한 명령 중 하나를 실행하려고하지만 비어있을 때. 여기 내 코드입니다 :

var exec = require('child_process').exec; 

child = exec('cat db.sql | sqlite3 mydb.db', 
    function (error, stdout, stderr) { 
     console.log('stdout: ' + stdout); 
     console.log('stderr: ' + stderr); 
     if (error !== null) { 
      console.log('exec error: ' + error); 
     } 
); 

내가 더 출력을 얻을 내 특급 서버를 시작할 때 : Express 서버는 IP에서 수신 : 로컬 호스트 포트 : 3000 표준 출력 : 표준 에러 :

는 DB 파일이 만들어집니다, 파일 크기는 0입니다. sqlite로 열면 mydb.db에 테이블이 없습니다.

위와 같이 두 가지 방법을 시도했지만 어느 것도 작동하지 않았습니다. 나는 또한 스폰을 사용하여 시도하고 그 중 하나도 성공하지 못했습니다. nodejs 내의 새로운 db에 sql 파일을 어떻게 가져올 수 있습니까?

답변

0

파이프 |은 명령 연결을위한 쉘 도구입니다. 노드에서 명령을 분리하고 첫 번째 출력을 다음 입력으로 재지 정해야합니다.

var fs = require("fs") 
, spawn = require("child_process").spawn 
, child = spawn("sqlite3", ["mydb.db"]) 

fs.createReadStream("./db.sql").pipe(child.stdin) 
관련 문제