zoukankan      html  css  js  c++  java
  • node.js 标准/错误输出 和 process.exit

    node.js中,各种模块有一种标准的写法:

    this._process.exec(command, options, function (err, stdout, stderr) {
                callback(err, stdout, stderr);
            })

    这里说的标准,是指回调函数,一般有err作为第一个参数,然后是具体的数据。

    写服务器程序的时候,或多或少会用到child_process这个模块,而这个模块的用法正如上边代码所示。

    例如调用一个shell命令删除文件,可以这样:

        child_process.exec('rm -rf xxxx', function (err, stdout, stderr) {
                callback(err, stdout, stderr);
            })

    返回的参数,其实err是一个对象,而stdout和stderr是字符串,stdout就是执行的子进程中使用标准输出的信息,而stderr就是子进程中错误输出流的内容。

    那么问题来了,如果我们自己用node.js写一个简单脚本,让其他node程序去调用,怎么模仿实现一样的返回情况呢?

    其他程序调用的时候,可能是这样:

    child_process.exec('node doSomething.js', function (err, stdout, stderr) {
                callback(err, stdout, stderr);
            })

    如果我们在子进程中,使用console.log/error打印信息,结果,会发现,在父进程的回调函数中将什么都得不到。

    奇了怪了,console.error不就是错误输出吗?好吧,这只能怪自己写web写多了,然后node.js并不是这样的。

    接下来就要介绍三个玩意,分别对应stdout、stderr和err。

    process.stdout.write
    process.stderr.write
    process.exit(非0)

    write函数接受的是一个字符串,那么为了方便使用,我们可以封装一下:

    console.error = function () {
        var msg = Array.prototype.join.call(arguments, ', ');
        process.stderr.write(msg);
    };

    最后,如果程序跑出错,除了在stderr中输出信息外,我们还可能需要立刻终止程序。

    按照linux的规范,一般成功用0表示,而非0则表示失败。那么process.exit也遵循这个规范。

    • process.exit(0)表示成功完成,回调函数中,err将为null;
    • process.exit(非0)表示执行失败,回调函数中,err不为null,err.code就是我们传给exit的数字。
  • 相关阅读:
    springboot 全局异常拦截器,友好异常提示
    java Word 转 PDF格式
    SpringCloud GateWay 使用 网关路由
    spring boot 读写参数到session
    springboot2.5.2 整合 flowable6.6.0 流程引擎
    java 自定义表单 动态表单 表单设计器 工作流引擎 flowable 项目源码
    springboot 运行 jar 包读取外部配置文件
    Spring Boot mybatisconfig 和 log4j 输出sql 日志
    SQL 数据查询语句之字符串拆分
    Enable Script debugging in IE8 at Window 7 operating system
  • 原文地址:https://www.cnblogs.com/kenkofox/p/4568805.html
Copyright © 2011-2022 走看看