2015-10-19 1 views
1

Я построил приложение в стеке MEAN для запроса и отображения данных компании. Они используют Power Query внутренне, поэтому я пытаюсь создать конечную точку API, которая экспортирует результаты запроса в формат, совместимый с Excel, например TSV. Я могу сделать это легко с помощью утилиты командной строки mongoexport, однако у меня возникают трудности с автоматизацией использования этой утилиты с помощью моего Node API. Моя текущая попытка этого следует, в соответствии с this учебника:Автоматизация экспорта из API Node.js в TSV или другой совместимый с Excel формат

var child = require('child-process'); 
var exec = child.exec(); 

module.exports.tsvData = function (query) { 
    //Atempted child process manipulation to use mongoexport CLI utility in this endpoint. 
    var command = 'echo "ANDY"' 

    child = exec(command, function (error, stdout, stderr) { 
     sys.print('stdout: ' + stdout); 
     sys.print('stderr: ' + stderr); 
     if (error !== null) { 
     console.log('exec error: ' + error); 
     } 
    }); 
    }; 

Это возвращает следующее сообщение об ошибке:

TypeError: object is not a function 
at module.exports.tsvData (C:\Users\awimley\pstat\app_api\controllers\main.js:367:13) 
at callbacks (C:\Users\awimley\pstat\node_modules\express\lib\router\index.js:164:37) 
at param (C:\Users\awimley\pstat\node_modules\express\lib\router\index.js:138:11) 
at pass (C:\Users\awimley\pstat\node_modules\express\lib\router\index.js:145:5) 
at Router._dispatch (C:\Users\awimley\pstat\node_modules\express\lib\router\index.js:173:5) 

Это на ребенке = линия. Я подозревал, что это связано с тем, что учебник устарел, поэтому я попытался использовать синтаксис из Child Process documents. Я пробовал:

child = child_process.spawn('ls', { 
    stdio: [ 
     0, // use parents stdin for child 
     'pipe', // pipe child's stdout to parent 
     fs.openSync('err.out', 'w') // direct child's stderr to a file 
    ] 
}); 

И он возвращает следующую ошибку:

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: spawn ENOENT 
    at errnoException (child_process.js:1011:11) 
    at Process.ChildProcess._handle.onexit (child_process.js:802:34) 
19 Oct 09:18:44 - [nodemon] app crashed - waiting for file changes before starting... 

Любая помощь в стрельбе утилита командной строки из API Node.js будет фантастическим.

ответ

1

Я думаю, что было столкновение имя, попробуйте следующее:

var child_process = require('child_process'); 
module.exports.tsvData = function(query) { 
    var command = 'echo ANDY'; 
    var child = child_process.exec(command, function (error, stdout, stderr) { 
    console.log('stdout: ' + stdout); 
    console.log('stderr: ' + stderr); 
    if (error !== null) { 
     console.log('exec error: ' + error); 
    } 
    }); 
}; 
+0

Это почти идентична моей первой попытки решения. Я попробовал ваш дословный. Он производит ту же ошибку «Объект не является функцией», указанную выше. – awimley

+0

Я забыл включить, что у меня строка var exec. Мой вызов exec действительно является child.exec(), а не только некоторой функцией. – awimley

+0

разные версии узла? ' $ узловых -v V4.0.0 $ узлового childProc.js STDOUT: ANDY STDERR: ' UNIX против окна? module.exports против немедленного выполнения? – davejagoda

Смежные вопросы