17

Node.jsを使用して、ターミナルの下部にコマンド プロンプト (単なるquestionプロンプトなど) を固定し、その上に出力を記録する方法はありますか。

本当に悪い例:

Your favourite food is sushi.
Your favourite food is chicken.
Your favourite food is okra.
--> What is your favourite food?

したがって、基本的には、ユーザーが常に入力できるようにし、プロンプトの上に入力をエコーするようにしています。

interface.question("What is your favourite food?", function(answer) {
    // output the answer above where this prompt was
    // and somehow keep this same prompt where is is
});

私がこれを使用したいと考えている特定のアプリケーションは、単純な IRC クライアントであり、ユーザーが入力する場所があり、すべての出力 (ユーザーが入力したものと他のユーザーも入力したもの) が上記の場所に出力されます。ユーザーが入力しています。下図の線は想像上のものです。

----------------------------------------------------------------------
|                                                                    |
|                                                                    |
|                                                                    |
|                                                                    |
|                                                                    |
|                                                                    |
|                                                                    |
| Stuff                                                              |
| Stuff                                                              |
| Stuff                                                              |
----------------------------------------------------------------------
| --> The user can type here                                         |
----------------------------------------------------------------------
4

4 に答える 4

3

これは簡単な解決策です(macosのノードv6.4.0でテスト済み):

const readline = require('readline');
const rl = readline.createInterface(process.stdin, process.stdout);

// Logs a message keeping prompt on last line
function log(message) {
  readline.cursorTo(process.stdout, 0);
  console.log(message);
  rl.prompt(true);
}

// Testing the solution

rl.question('Enter something...:', userInput => {
  log('You typed ' + userInput);
  rl.close();
});

log('this should appear above the prompt');
setTimeout(
  () => log('this should appear above the prompt'),
  1000
);
于 2016-10-25T18:10:53.913 に答える
2

まあ、私はその種の問題を解決するためにインクワイアラーを使用しています..それらはすべてすでに解決されています..使いやすく、さまざまな種類のpropmtタイプがあります

ここで、ドキュメントからの小さな例を示します。

var inquirer = require('inquirer');
inquirer.prompt([/* Pass your questions in here */]).then(function (answers) {
    // Use user feedback for... whatever!! 
});
于 2016-11-22T15:38:19.757 に答える
-1

readlineコアモジュールを使用するだけです:

var readline = require('readline');

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("What do you think of node.js? ", function(answer) {
  console.log("Thank you for your valuable feedback:", answer);
  rl.close();
});

これで問題が解決します:

var readline = require('readline');

var rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

var fav_foods = [];

var ask_question = function() {
  rl.question("What is your favourite food? ", function(answer) {
    fav_foods.push(answer)
    fav_foods.forEach(function (element) {
       console.log("Your favourite food is " + element)
    })
    ask_question()
  });
}

ask_question()
于 2012-10-01T12:36:10.413 に答える