Node.js 如何通过nodejs exec将.sql文件导入sqlite

Node.js 如何通过nodejs exec将.sql文件导入sqlite,node.js,sqlite,Node.js,Sqlite,我在nodejs/express应用程序中使用sqlite3数据库。我想在启动express server时将.sql文件导入sqlite。由于似乎没有一种方法可以使用node-sqlite3包进行导入,因此我尝试使用exec函数进行导入 当我从命令行运行这两个命令时,它们都可以工作: cat db.sql | sqlite3 mydb.db sqlite3 mydb.db

我在nodejs/express应用程序中使用sqlite3数据库。我想在启动express server时将.sql文件导入sqlite。由于似乎没有一种方法可以使用node-sqlite3包进行导入,因此我尝试使用exec函数进行导入

当我从命令行运行这两个命令时,它们都可以工作:

cat db.sql | sqlite3 mydb.db sqlite3 mydb.db 但是,当我尝试通过nodejs exec函数运行这两个命令时,会创建mydb.db文件,但它是空的。这是我的密码:

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 server时,没有得到任何输出: 正在ip上侦听的Express server:本地主机端口:3000 标准: 标准:

已创建db文件,但文件大小为0。当我用sqlite打开它时,mydb.db中没有表


如上图所示,我尝试了两种方法,但都不起作用。我也尝试过使用spawn,但也没有成功。如何将sql文件导入nodejs中的新数据库?

Pipe
是一种用于链接命令的shell工具。在节点中,您需要分离命令并将第一个输出重定向到下一个输入

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

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