2014-05-22 54 views
3

我在我的nodejs/express應用程序中使用sqlite3數據庫。我想在啓動快速服務器時將.sql文件導入到sqlite中。由於似乎沒有使用node-sqlite3包進行導入的方法,因此我試圖使用exec函數執行此操作。如何通過nodejs將.sql文件導入到sqlite exec

,當我在命令行中運行它們這些命令的工作:

貓db.sql | sqlite3的mydb.db sqlite3的mydb.db < db.sql

然而,當我嘗試通過exec函數,創建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服務器我沒有得到任何輸出: Express服務器監聽IP:本地主機端口:3000 標準輸出: 標準錯誤:

的數據庫文件被創建,但文件大小爲0.當我用sqlite打開它時,mydb.db中沒有表格

我嘗試了上面顯示的兩種方法,但它們都不起作用。我也嘗試使用產卵,並沒有取得任何成功,無論是。如何將sql文件導入到nodejs中的新數據庫?

回答

0

管道|是一個鏈接命令的shell工具。在節點中,您需要分隔您的命令並將第一個輸出重定向到下一個輸入。

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

fs.createReadStream("./db.sql").pipe(child.stdin)