#javascript #node.js #express #socket.io
#javascript #node.js #экспресс #socket.io
Вопрос:
Я работаю над небольшим проектом, просто «простым»:
Пользователь может писать на терминале, например, криптовалюты :
yarn start btc eth
и я отображаю массив некоторых данных (цена, изменение 24 и т. Д.), Я использую:
- модуль: https://www.npmjs.com/package/table api:
- api: https://www.coingecko.com/en/api
Я могу это сделать, теперь я хочу обновить этот массив за X секунд… но я не знаю, как это сделать:/ (Я пробовал с setInterval плохая идея, хахаха), я использую только nodejs и express для своего сервера, но я думаю, что мне нужно использовать SocketIO нет?
Комментарии:
1. Не уверен, о чем вы здесь спрашиваете? Возможно ли отображать данные в терминале и обновлять его через секунду? Да, это так.
2. да, я хочу, чтобы отображаемые данные обновлялись в одной таблице, а не воссоздавали новую таблицу каждые X секунд
Ответ №1:
Чтобы обновить данные в терминале (cli), вы должны использовать управляющие коды ANSI. Я уже некоторое время этим занимаюсь, поэтому я создал для себя небольшую информацию, чтобы отслеживать все, что вы можете с ними сделать: https://gist.github.com/dominikwilkowski/60eed2ea722183769d586c76f22098dd
Пример ниже:
process.stdout.write('This line will be deleted');
process.stdout.write('u001b[2K' 'u001b[1G');
// u001b[2K = clear line
// u001b[1G = reset cursor to start of line
process.stdout.write('This line will replace above line');
process.stdout.write('n');
Итак, вы можете сделать это со своей таблицей. Вы либо знаете, сколько строк в вашей таблице, и наводите курсор на этот вид спорта, очищаете остальное и перерисовываете таблицу, либо каждый раз полностью очищаете экран. Я бы предложил первое.
Ваш вариант использования может быть примерно таким:
let draw = 0;
function drawTable() {
draw ;
process.stdout.write(` your n table n data ${draw} n`); // prints 3 lines
}
drawTable(); // initial draw
const myInterval = setInterval(() => {
process.stdout.write('u001b[3Au001b[1G');
// move three rows up and reset cursor to first column
drawTable(); // draw again
}, 1000); // redraw your table every second
Это увеличит ваш вывод и очистит его между розыгрышами.