【发布时间】:2022-02-14 17:12:54
【问题描述】:
我正在学习使用 NodeJs 和 Express JS 开发一个 Rest API。我构建了一个控制器来在其中做我的事情。我想在控制器内部调用一个本地函数,但它不起作用。我总是得到未定义错误。
听到是我的控制器,
const db = require('../config/db');
class TransactionController {
constructor(){
}
generateCustomerTransaction(req, res) {
const program_id = req.params.program_id;
const customerList = getCustomerList(program_id); //error here
//Do some business logics
return res.json(result);
};
getCustomerList(program_id) {
//Do some query to get a list of result
return results;
}
}
module.exports = SeatExcelController;
一切看起来都像其他语言一样简单,但我明白
ReferenceError:getCustomerList 未定义
我不知道如何简单地调用本地函数。
请帮忙。非常感谢。
【问题讨论】:
-
导出时您使用了错误的类名。请改用
TransactionController。 -
将
const customerList = getCustomerList(program_id);更改为const customerList = this.getCustomerList(program_id);。在 Javascript 中,调用方法时必须引用对象。如果您希望引用的对象是您当前在一个方法中的对象,那么您使用this作为对象引用。在您的示例中,您还必须确保generateCustomerTransaction()的调用方式对this具有适当的值。您没有说明需要我们就这部分提供建议的地方。 -
我注意到您显示的所有方法都没有引用任何实例数据,因此类上的实例方法在这里可能不是合适的工具。也许它们应该是类上的静态方法或只是普通函数。
-
另外,
getCustomerList()不是本地函数。这是在您的类上定义的方法。它的范围是这样的,它通常仅在该类的实例的上下文中可用。因此,您通常会使用该类的一个实例,然后在该实例上引用该方法。所以,请不要认为这些只是具有正常功能范围的正常功能。他们不是。如果您想以这种方式使用它们,可以将它们定义为普通函数。