Метод TypeError не является функцией - PullRequest
0 голосов
/ 24 октября 2019

Я получаю ошибку TypeError для метода GET на моем сервере.

Точная ошибка:

 TypeError: testCont.createDevice is not a function

Обычно я не пишу свой код. Причина, по которой я пытаюсь это сделать, заключается в том, что я могу вызывать маршруты из разных контроллеров.

Так выглядит основа моего кода.

index.js

Он содержит все обычные вещи.

Здесь я импортирую контроллер:

 var testCont = require('./api/controllers/testController');

И вот мое объявление маршрута:

 const testRoutes = require('./api/routes/testRoutes');
 testRoutes(app, testCont);

testController.js выглядитвот так ...

 'use strict';
 module.exports = function() {
   var mod = {
     createDevice() {
       return{ success: true }
     }
   }
   return mod;
 };

Вот класс testRoutes.js ...

 module.exports = function(app, testCont) {
   app.get('/api/v1.2/devices', (req, res) => {
     testCont.createDevice()
   })
 };

Как я уже говорил, идея заключалась в том, чтобы в конечном итоге вызывать маршруты из другого контроллера, когдатребуется информация из ответа.

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

Заранее спасибо.

ОБНОВЛЕНИЕ:

По запросу я показываю предложенные изменения, внесенные.

Index.js выглядит следующим образом ...

 var testCont = require('./api/controllers/testController');
 var testRoutes = require('./api/routes/testRoutes');
 testRoutes(app, testCont);

Когда этот раздел кода закомментирован, все остальные вызовы в других контроллерах и маршрутах работают нормально.

Весь testController. Файл js выглядит следующим образом:

 'use strict';
 module.exports = function() {
   createDevice() {
       return{ success: true }
     }
 };

Весь файл testRoutes.js выглядит следующим образом:

 module.exports = function(app, testCont) {
   app.get('/api/v1.2/devices', (req, res) => {
     testCont.createDevice()
   })
 };

Когда код добавляется в файл index.js, я получаю 502 Bad Gatewayошибка.

ОБНОВЛЕНИЕ 2:

Я внес исправление в свой надзор ...

 'use strict';
 module.exports = {
   createDevice() {
       return{ success: true }
     }
  };

Теперь это выглядит так, что получает 504 Время шлюза -вне.

1 Ответ

2 голосов
/ 24 октября 2019

Как написан ваш testController.js, вам нужно изменить это:

var testCont = require('./api/controllers/testController');

на следующее:

var testCont = require('./api/controllers/testController')();

Метод .createDevice() не используется в экспортируемомобъект. Это объект, который экспортируемая функция возвращает, когда вы вызываете его. Таким образом, вам нужно либо изменить способ экспорта, чтобы он напрямую экспортировал объект, либо вызвать функцию, чтобы добраться до возвращаемого объекта.


Или вы можете просто изменить экспортчтобы напрямую экспортировать объект, изменив его с этого:

'use strict';
 module.exports = function() {
   var mod = {
     createDevice() {
       return{ success: true }
     }
   }
   return mod;
 };

на это:

'use strict';
 module.exports = {
     createDevice() {
       return{ success: true }
     }
   }
 };
...