Я не понимаю эту TypeError

var Subscription = require('./Subscription');
var api = require('./api');

exports = module.exports = {};
var bridgeData;

function validateAccount(account) {
  if (!account) throw new Error('Muzzley account details must be present!');
  if (!account.appToken) throw new Error('appToken is not defined!');
  if (!account.profileId) throw new Error('profileId is not defined!');
  if (!account.serialNumber) throw new Error('serialNumber is not defined!');
}

function validateComponents(components) {
  if (!components || components.length === 0) throw new Error('Bridge components must be defined!');

  for (var i = 0; i != components.length; ++i) {
    if(!components[i].id) throw new Error('Missing component id!');
    if (!components[i].type) throw new Error('Missing component type!');
    if (!components[i].label) throw new Error('Missing component label!');
  }
}

exports.connect = function (account, components, callback) {

  validateAccount(account);
  validateComponents(components);

  bridgeData.appToken = account.appToken;
  bridgeData.profileId = account.profileId;

  api.registerBridge(account, function (err, bridge) {
    if (err) return callback(err);

    bridgeData.deviceKey = bridge.deviceKey;

    api.updateBridge(bridge, components, function (err) {
      if (err) return callback(err);

      var subscription = new Subscription(account.profileId, account.appToken);
      subscription.load(function (err) {
        return callback(err, subscription);
      });
    });
  });
};

exports.updateComponents = function (components, callback) {
  api.updateBridge(bridgeData, components, function (err) {
    return callback(err);
  });
};

Существует ошибка под названием undefined:

ERROR: /home/root/.node_app_slot/node_modules/muzzley-bridge-node/lib/index.js:29                                                                                     
ERROR:   bridgeData.appToken = account.appToken;                                                                                                                      
ERROR:                       ^                                                                                                                                        
ERROR: TypeError: Cannot set property 'appToken' of undefined

person Hat hout    schedule 23.11.2015    source источник
comment
Вы не объявляете переменную bridgeData в своем коде. так что это не определено.   -  person Ziki    schedule 23.11.2015
comment
@Зики прав. Также сделайте var bridgeData = {};   -  person Harpreet Singh    schedule 23.11.2015
comment
Это не должно было быть так сложно отладить. Поставьте точку останова на строку, вызвавшую ошибку. Изучите значение bridgeData, отметив, что оно не определено. Тогда бери оттуда.   -  person    schedule 23.11.2015
comment
Любые новости по этому пункту. В эти дни у меня та же проблема: я предполагаю, что bridgeData должен быть определен внутри библиотеки muzzley-bridge-node (см. Путь к файлу ERROR), не так ли??   -  person SteMMo    schedule 11.01.2017


Ответы (3)


Вы неправильно объявляете bridgeData в своем коде.

Просто измените следующую строку:

var bridgeData;

To:

var bridgeData = {};

Когда вы делаете: var bridgeData; ваша переменная не определена, и вы не можете назначить новое свойство неопределенной переменной.

person Ziki    schedule 23.11.2015
comment
@Hathout Пожалуйста, опубликуйте обновленный код. Также добавьте console.log(JSON.stringify(account)); после: validateComponents(components); - person Ziki; 26.11.2015

Вы подключаете плату к Muzzley с помощью этой библиотеки? Это уже исправлено. Бежать:

npm установить узел muzzley-bridge

установить самую последнюю версию

person Miguel Sousa    schedule 24.11.2015
comment
Я сделал, но ничего не изменилось - person Hat hout; 26.11.2015
comment
Можете ли вы дать мне немного больше информации о том, чего вы пытаетесь достичь? Вы используете Intel XDK IoT Edition с Intel Edison/Galileo? Если вы используете Intel XDK, вам придется перестроить пакеты приложений с помощью кнопок перестроения и загрузки. Если вы хотите установить его вручную, приложение можно найти в папке node_app_slot. Внутри вы должны найти папку с именем node_modules, содержащую внешние зависимости. Посмотрите файл muzzle-bridge-node/package.json и проверьте, является ли версия самой последней (0.0.3) - person Miguel Sousa; 27.11.2015

Я только что написал автору.
Он исправил библиотеку -> ver.0.0.4 .
Теперь 'npm update muzzley-bridge-node' !

person SteMMo    schedule 11.01.2017