如何从节点应用程序执行命令

时间:2015-07-27 15:13:23

标签: javascript node.js

我需要从我的节点JS应用程序调用CMD命令, 可能吗 ?

我尝试使用以下(POC)并收到错误

var express = require('express');
var app = express();

app.get('/', function (req, res) {
    function cmd_exec(cmd, args, cb_stdout, cb_end) {
        var spawn = require('child_process').spawn,
            child = spawn(cmd, args),
            me = this;
        me.exit = 0;  // Send a cb to set 1 when cmd exits
        child.stdout.on('data', function (data) {
            cb_stdout(me, data)
        });
        child.stdout.on('end', function () {
            cb_end(me)
        });
    }
    foo = new cmd_exec('npm', 'install glob --save',
        function (me, data) {
            me.stdout += data.toString();
        },
        function (me) {
            me.exit = 1;
        }
    );

    setTimeout(
        // wait 0.25 seconds and print the output
        log_console,
        250);


    function log_console() {
        console.log(foo.stdout);
    }
    res.send("Hello world");
});

我在以下链接中看到了这段代码

node.js shell command execution

错误是: TypeError:args选项的值不正确 在child = spawn(cmd, args),

我在这里做错了什么?Currnlty我只是使用npm install命令(仅用于测试)但是我可以执行和运行的任何其他命令就足够了

1 个答案:

答案 0 :(得分:2)

执行终端命令时,有两部分:命令和参数。在您的情况下,命令是cmd_exec('npm', ['install', 'glob', '--save'], ,参数是之后的所有内容。

<StackPanel x:Name="EnterInfo" Orientation="Horizontal" HorizontalAlignment="Left" Margin="6,0,0,0">
    <TextBox x:Name="mainUserName" IsManipulationEnabled="True" FontSize="14" Height="24" MinWidth="150" Width="Auto"/>
    <Button x:Name="nameEnter" IsDefault="True" Content="OK" Height="24" Width="24" FontSize="12" Click="btnNameEnter_Click" Margin="4,0,0,0"/>
</StackPanel>