等待用户在 Node.js 中输入内容

2023-12-23

我了解 Node.js 中异步事件的基本原理,并且正在学习如何以这种方式编写代码。但是,我遇到了以下情况:

我想编写偶尔会暂停以供用户输入的代码。

该程序并非旨在用作服务器(尽管目前它用于命令行)。我意识到这是 Node 的非典型用法。我的目标是最终将程序迁移回客户端 Javascript 应用程序,但我发现在 Node.js 中工作既令人着迷,又对调试非常有用。这让我回到了说明问题的示例:

它读入文本文件并输出每一行,除非该行以“?”结尾。在这种情况下,它应该暂停,让用户澄清该行的含义。目前,我的程序首先输出所有行,然后等待最后的澄清。

有没有什么方法可以强制node.js在条件触发的情况下暂停命令行输入(即,行以“​​?”结尾)?

var fs = require("fs");
var filename = "";
var i = 0;
var lines = [];

// modeled on http://st-on-it.blogspot.com/2011/05/how-to-read-user-input-with-nodejs.html
var query = function(text, callback) {
    process.stdin.resume();
    process.stdout.write("Please clarify what was meant by: " + text);
    process.stdin.once("data", function(data) {
        callback(data.toString().trim());
    });
};

if (process.argv.length > 2) {
    filename = process.argv[2];
    fs.readFile(filename, "ascii", function(err, data) {
        if (err) {
            console.error("" + err);
            process.exit(1);
        }
        lines = data.split("\n");
        for (i = 0; i < lines.length; i++) {
            if (/\?$/.test(lines[i])) { // ask user for clarification
                query(lines[i], function(response) {
                    console.log(response);
                    process.stdin.pause();
                });
            }
            else {
                console.log(lines[i]);
            }
        }
    });
}
else {
    console.error("File name must be supplied on command line.");
    process.exit(1);
}  

这是另一种没有依赖关系的方法(readline https://nodejs.org/api/readline.html是内置的)

const readline = require('readline');

function askQuestion(query) {
    const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout,
    });

    return new Promise(resolve => rl.question(query, ans => {
        rl.close();
        resolve(ans);
    }))
}


const ans = await askQuestion("Are you sure you want to deploy to PRODUCTION? ");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

等待用户在 Node.js 中输入内容 的相关文章

随机推荐

  • 服务器错误:获取 pod 日志时出现拨号 tcp i/o 超时错误

    我正在开发 OpenShift Origin 1 1 它使用 kubernetes 作为 docker 容器的编排工具 我正在创建 Pod 但看不到构建日志 user ip master oc get pods NAME READY STA
  • cloudfront 私人限时 url

    我有一个客户想要在线销售教程视频 我已经从 CF 中预览了他的教程 这是公开的 现在我想使用c sdk生成私有的 限时的URL 以允许购买教程的客户在有限的时间内下载它们 确认付款后 我想生成一个 URL 并通过电子邮件将其发送给客户 CF
  • Django:何时使用 QuerySet none()

    刚刚在Django 文档 https docs djangoproject com en dev ref models querysets none 调用 none 将创建一个永远不会返回任何对象的查询集 访问结果时不会执行任何查询 一个
  • 用于匹配 URL 后两部分的正则表达式

    我正在努力找出最好的regex仅匹配 url 中的最后两个字符串 例如与www stackoverflow com我只想匹配stackoverflow com 我遇到的问题是某些字符串可能有大量句点 例如 a abcnewsplus i a
  • 如何实现上个月/下个月按钮并显示当月的日期?

    设想 我有一个费用跟踪 iOS 应用程序 我将费用详细信息视图控制器中的费用存储到表视图 带有获取的结果控制器 中 该表视图显示费用列表以及类别 金额和日期 我的实体 金钱 中确实有一个日期属性 它是支出或收入的父实体 问题 我想要的是基本
  • 为什么数据库复制时从机读取速度比主机快

    在主 从数据库复制中 所有写入都转到主机 所有读取都转到从机 主机将数据复制到从机 当主机将数据复制到从机时 从机必须执行写入操作以锁定该行 从从机读取速度更快 但为什么呢 奴隶should be a lot更快 因为 它写入的数据量与ma
  • 使用 x-www-form-urlencoded 的 HttpClient POST 请求

    我正在尝试发出 POST 请求x www form urlencoded内容类型标头如下 login username password Observable
  • 取消转义 Ruby 字符串中的特殊字符序列

    我正在从包含如下序列的文件加载文本 abc ndef tghi 我想 转义 所有特殊字符 例如来治疗 n作为换行符和 t作为选项卡等 而不是自动以例如 n or t在字符串中 是否有捷径可寻 文本将按照文件中的原样加载 如果文件具有文字文本
  • 403 错误代码 Google Drive Python 已超出此文件的下载配额

    我使用 Google Drive Python 库https developers google com drive v3 web quickstart python step 1 turn on the api name https de
  • WCF REST 请求拦截器身份验证

    我正在尝试在 WCF RequestInterceptor 中进行一些基本身份验证 我在用本文 http msdn microsoft com en us library ee391967 aspx作为一个开始 我遇到的问题是拦截器和服务之
  • 在 Flask 中返回 Excel 文件

    我正在 python 3 中构建一个 Flask 应用程序 我正在尝试写入输出并响应下载 我所做的就是将 sqlite3 db 内容写入 Excel 文件 尝试发送到客户端进行下载 一切似乎都工作正常 直到创建 Excel 文件 我无法发送
  • std::变换和移动语义

    我正在使用 Boost Filesystem 在目录中创建文件列表 我用boost filesystem recursive directory iterator and std copy将每个路径放入 std vector 作为boost
  • 使用一个 UIViewController 和两个 XIB 处理 iPad 上的方向变化

    我想用一个 UIViewController 和两个 XIB 例如 MenuView 和 MenuViewLandscape 来处理 iPad 应用程序上的方向更改 那么 在 MenuViewController 的 willRotateT
  • 使用 Prism 和 IsNavigationTarget 处理嵌套视图,可能返回 false

    I m trying to find solution for the following problem I have a WPF app I used mvvm and prism most recent version 7 to bu
  • 如何在 C++ 中退出时运行函数

    我有一个函数 我想在程序退出时运行 void foo std cout lt lt Exiting lt lt std endl 如何将其注册为在程序存在时运行 无论程序何时以及为何退出 由于信号 exit 调用等 您可以使用适当命名的st
  • 如何避免内存泄漏? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • __doPostBack 在 Firefox 中不起作用

    doPostBack 在 firefox 3 中不起作用 尚未检查 2 一切在 IE 6 和 7 中都运行良好 甚至在 Chrome 中也能运行 这是一个带有 OnClick 事件的简单 asp LinkBut ton
  • 让子弹朝玩家面对的方向发射

    当我意识到他们只会走时 我刚刚得到一些帮助来弄清楚如何让我的玩家发射子弹 有点预料到这一点 但因为只有 y 的移动值 我不知道如何让子弹朝玩家面对的方向发射 我知道该怎么做 但我只是不知道该怎么做 我想我可以以某种方式使用这个游戏中的光标和
  • React-native fbsdk 构建错误

    我在运行命令react native run android 或 gradlew build 时收到以下错误 react native fbsdk generateReleaseResValues UP TO DATE react nati
  • 等待用户在 Node.js 中输入内容

    我了解 Node js 中异步事件的基本原理 并且正在学习如何以这种方式编写代码 但是 我遇到了以下情况 我想编写偶尔会暂停以供用户输入的代码 该程序并非旨在用作服务器 尽管目前它用于命令行 我意识到这是 Node 的非典型用法 我的目标是