【问题标题】:How to print function result into a browser in nodejs?如何在nodejs中将函数结果打印到浏览器中?
【发布时间】:2021-05-26 14:23:39
【问题描述】:

我有一个简单的快速网络服务器和一个执行 docker ps 的函数。如何将函数的结果打印到浏览器中?

const { exec } = require("child_process");
const express = require('express')
const app = express()
function docker() {

    exec("docker ps", (error, stdout, stderr) => {
        if (error) {
            console.log(`error: ${error.message}`);
            return;
        }
        if (stderr) {
            console.log(`stderr: ${stderr}`);
            return;
        }
        console.log( `${stdout}`);
    })

}
docker();

app.get('/', function (req, res) {
    res.send(`${docker()}`)
})

app.listen(3000)

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    您可以将回调传递给 docker()(函数应该是动词/动作,而不是名词,所以我将其重命名为 runDocker)并在那里调用您的 res.send() 函数,但它更简洁地承诺使用util 模块的exec 回调:

    const express = require("express");
    const {promisify} = require("util");
    const exec = promisify(require("child_process").exec);
    
    const runDocker = async () => {
      const {stdout, stderr} = await exec("docker ps");
    
      if (stderr) {
        throw Error(stderr);
      }
    
      return stdout;
    };
    
    express()
      .get("/", async (req, res) => {
        try {
          res.send(await runDocker());
        }
        catch (err) {
          console.error(err);
          res.sendStatus(500);
        }
      })
      .listen(3000)
    ;
    

    通常,日志记录应该发生在调用范围内,而不是函数中的副作用。您可以为多条路线添加通用async error handler

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2017-11-09
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多