не удается получить серийный номер базовой платы в nodejs

#node.js #system-information

#node.js #информация о системе

Вопрос:

Я использую Ubuntu в vmware. Я пытаюсь получить серийный номер базовой платы.

 var si = require("systeminformation");
console.log(si.baseboard().serial);
  

Он возвращает undefined. Проблема в моем коде? Или проблема в том, что ubuntu работает в vmware?

Ответ №1:

Вы можете видеть здесь в systeminformation исходном коде, что он считывает файл /sys/devices/virtual/dmi/id/board_serial (если запуск dmidecode -t 2 2>/dev/null завершается неудачей).

Если вы cat /sys/devices/virtual/dmi/id/board_serial используете свою оболочку (если она вообще существует), что вы получаете?

Если он пустой или вообще не существует, значит, данные не предоставлены вашей средой.

Комментарии:

1. Спасибо. /sys/devices/virtual/dmi/id/board_serial не существует. И я нахожу, что причина, по которой файл не существует, заключается в том, что это виртуальная машина. Большое спасибо

Ответ №2:

Чтобы завершить ответ AKX, si.baseboard() возвращает обещание (начиная с v3), поэтому вам нужно сделать что-то вроде этого:

 si.baseboard().then(el => console.log(el.serial))
  

или, если вы хотите придерживаться синтаксиса обратного вызова

 si.baseboard(el => { console.log(el.serial) })
  

Обратите внимание, что он возвращает пустую строку, если я запускаю скрипт как обычный пользователь. Я могу отобразить серийный номер, только если я запускаю его как root.

Ответ №3:

Я обнаружил, что могу использовать serial-number для получения уникального номера даже на виртуальной машине.

 var serialNumber = require('serial-number');

serialNumber(function (err, value) {
 console.log(value);
});
  

Комментарии:

1. serial-number основан на dmidecode , так что вы, вероятно, можете сделать. Обратите внимание, что мне также приходится иметь дело с правом доступа к этому пакету в моей системе (не виртуальной машине).

2. Вы знаете, как я могу получить значение и сохранить его в другой переменной вне функции? Я пробовал другой метод, но не работает