如何将终端输出作为JSON返回到节点API?

时间:2019-04-05 12:25:57

标签: node.js terminal

我正在使用Node API,可用于在终端上运行一些命令。 例如,当我转到:http://localhost:3000/runLS时,命令ls -la在我的工作目录上运行,并且输出以JSON的形式返回给API。 我已经能够从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}.`)
})

当我去找Endpoin时,什么也没得到,终端上也没有错误。我是Node noob,所以希望您能用简单的语言进行解释。 有任何想法吗? [如果有什么用,我将作为终端在Windows上的Git Bash上工作]

1 个答案:

答案 0 :(得分:0)

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
}