我在服务器上的GET方法上始终遇到TypeError。
确切的错误是:
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网关超时。
答案 0 :(得分:2)
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 }
}
}
};