Как вернуть вывод терминала в API узла в виде JSON? - PullRequest
0 голосов
/ 05 апреля 2019

Я работаю над Node API, который я могу использовать для запуска некоторых команд в Терминале.Например, когда я перехожу к: http://localhost:3000/runLS, в моем рабочем каталоге запускается команда ls -la, а вывод возвращается в API в виде JSON.Я дошел до того, что смог запустить команду терминала из API.У меня есть два файла кода: commands.js, где я определил свои команды.

var exec = require('child_process').exec;
function puts(error, stdout, stderr) { 
    console.log(stdout)
}

const runLS = (request, response) => {
    exec("ls -la", puts, (error, results) => {
        if(error) {
            throw error
        }
    })
  }


  module.exports = {
    runLS
  }

У меня также есть app.js:

const express = require('express')
const cors = require('cors')
const app = express()
const port = 3000


var corsOptions = {
    origin: '*',
    credentials: true };

app.use(cors(corsOptions));


app.get('/', (request, response) => {
    response.json({ info: 'Commandline status API ' })
})

const comm = require('./commands_test.js')
app.get('/runLS', comm.runLS)

app.listen(port, () => {
    console.log(`App running on port ${port}.`)
})

Когда я запускаю это и затем идуна http://localhost:3000/runLS я получаю стандартный вывод на терминал.Я, однако, хочу, чтобы он отображался в браузере как JSON.Я отредактировал мой файл command.js, как показано ниже:

var exec = require('child_process').exec;
const runLS = (error, stdout, stderr) => {
    exec("ls -la", (error, results) => {
        if(error) {
            throw error
        }
        stdout.status(200).json(stdout.rows)
    })
  }


  module.exports = {
    runLS
  }

, а затем отредактировал мой app.js:

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const app = express()
const port = 3000


var corsOptions = {
    origin: '*',
    credentials: true };

app.use(cors(corsOptions));
app.use(bodyParser.json())
app.use(
    bodyParser.urlencoded({
        extended: true,
    })
)

app.get('/', (request, response) => {
    response.json({ info: 'Commandline status API ' })
})

const comm = require('./commands_test.js')
app.get('/runLS', comm.runLS)

app.listen(port, () => {
    console.log(`App running on port ${port}.`)
})

Когда я иду на конечную точку, теперь просто ничего не получаю, естьошибок в терминале тоже нет.Я Node Noob, поэтому я был бы признателен за объяснения на простом языке.Есть идеи?[Если это что-то значит, я работаю над Git Bash на windows как мой терминал]

1 Ответ

0 голосов
/ 05 апреля 2019

stdout.rows не существует, поскольку это объект экспресс-ответа.

var exec = require('child_process').exec;
const runLS = (req, res, next) => {
    exec("ls -la", (error, results) => {
        if (error) {
            res.status(400).send(error);
        }
        res.status(200).json({
            results: results
        })
    })
}


module.exports = {
    runLS
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...