带参数的mongoexport + node.js +子进程

beN*_*erd 2 javascript csv mongodb node.js

我正在尝试使用mongodb中的node.js导出csv.为此,我开始使用此代码:

app.get('/export', function(req, res) {
 var spawn = require('child_process').spawn,
 ls = spawn('mongoexport');
res.sendfile('/home/database.csv'); 
});
Run Code Online (Sandbox Code Playgroud)

这很好用.然后为了使它更有用,我尝试使用参数使用mongoexport在下面编写代码:

 app.get('/export', function(req, res) {
 var spawn = require('child_process').spawn,
 ls = spawn('mongoexport --db lms --collection databases --fields firstname,lastname,email,daytimePhone,addressOne,city,state,postalCode,areaOfStudy,currentEducationLevel,company --csv --out /home/database.csv');
res.sendfile('/home/database.csv') 

});
Run Code Online (Sandbox Code Playgroud)

这引发了一个异常:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:980:11)
    at Process.ChildProcess._handle.onexit (child_process.js:771:34)
Run Code Online (Sandbox Code Playgroud)

然后我尝试只使用一个参数,但它给出了同样的错误:(

我也试过这个看看参数是否以这种方式工作但是同样的错误:

spawn('mongoexport',['--csv']);
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 5

spawn的语法是:

spawn(<command>, [array of arguments]);
Run Code Online (Sandbox Code Playgroud)

例如,ls使用-l /home选项执行命令将如下所示:

ls = spawn('ls', ['-l', '/home'];
Run Code Online (Sandbox Code Playgroud)

所以你spawn('mongoexport',['--csv']);正朝着正确的方向前进,但mongoexport --csv无效.这就是你收到错误的原因.mongoexport需要的不仅仅是--csv.与上面所做的一样,例如,您需要指定数据库名称(-d "lms"),集合名称(-c "databases"),字段名称(--fields firstname,lastname)等.

在你的情况下,它应该是这样的:

 var spawn = require('child_process').spawn;
 app.get('/export', function(req, res) {
     var mongoExport = spawn('mongoexport', [ 
         '--db', 'lms', '--collection', 'databases', 
         '--fields',
         'firstname,lastname,email,daytimePhone,addressOne,city,state,postalCode,areaOfStudy,currentEducationLevel,company',   
         '--csv'
     ]);

     res.set('Content-Type', 'text/plain');
     mongoExport.stdout.on('data', function (data) {
         if (data) {
             // You can change or add something else here to the
             // reponse if you like before returning it.  Count
             // number of entries returned by mongoexport for example
             res.send(data.toString());
         } else {
             res.send('mongoexport returns no data');
         }
     });
}
Run Code Online (Sandbox Code Playgroud)