Выполнить несколько команд Windows из nodejs - PullRequest
0 голосов
/ 18 октября 2019

Когда мой сервер Windows получает запрос на публикацию, мне нужно выполнить команду:

cd D:\project
git pull
mvn clean compile
cd target
java -jar app.jar -argument

Я написал код, но он не работает:

const nodeCmd = require('node-cmd')

app.post((req, res) => {
  let command = `cd D:\project\my_project
                 git pull
                 mvn clean compile
                 cd target
                 java -jar app.jar ${req.body.arg}`;
  nodeCmd.get(command, (err, data, stderr) => {
    if(data) { 
     return res.json(data);
    }
    return err;
 });
})

Здесьтакое сообщение об ошибке:

{ Error: Command failed: cd D:projectmy_project && dir
The system cannot find the path specified.

    at ChildProcess.exithandler (child_process.js:294:12)
    at ChildProcess.emit (events.js:198:13)
    at maybeClose (internal/child_process.js:982:16)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
  killed: false,
  code: 1,
  signal: null,
  cmd: 'cd D:Tempautobooker && dir' }

Ответы [ 3 ]

1 голос
/ 18 октября 2019

Обратные слеши в командной строке не экранированы. Вы можете использовать string.raw, чтобы заставить механизм JS обрабатывать литерал шаблона как необработанную строку.

let command = String.raw`cd D:\project\my_project
                         git pull
                         mvn clean compile
                         cd target
                         java -jar app.jar ${req.body.arg}`;
1 голос
/ 18 октября 2019

в соответствии с node-cmd документацией, ваш код идеален, но я считаю, что ваша проблема заключается в пути вашего проекта, что означает, что ваша первая команда не выполнена, и это потому, что ваш обратный слеш не экранирован, в соответствии с вашим сообщением об ошибке ваш путьprojectmy_project, что неверно, вам нужно обновить путь, чтобы он был таким D:\\project\\my_project

1 голос
/ 18 октября 2019

Я не очень разбираюсь в том, как выполнить такую ​​задачу в Windows, но у меня есть подозрение, что вам может понадобиться разбить их на несколько вызовов или && между ними.

...