我不太明白类继承和上下文在nodejs + expressjs中是如何工作的。
我有3个文件:
api.js
class API {
constructor () {
this._id = Math.random()
console.log("Instantiated id:" + this._id)
}
list (req, res, next) {
console.log("Instantiated id:" + this._id)
}
}
module.exports = API
user.js的
const API = require('./api.js')
class UserAPI extends API {
constructor () {
super()
}
}
module.exports = UserAPI
route.js
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
我希望看到的是每次执行GET请求时启动相同ID的ID。
但是当我做GET请求时,我有:ERROR: TypeError: Cannot read property '_id' of undefined
如何在派生时访问Base类中的成员?
谢谢!
答案 0 :(得分:1)
问题不是类继承,而只是你使用list方法的方式。您将它直接传递给router.get
,但它不会起作用,因为您只传递对该函数的引用,然后该函数不知道UserAPI
实例的上下文
您可以通过将匿名函数传递给router.get
然后执行user.list
来解决此问题,如下所示:
<强> route.js 强>
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));
答案 1 :(得分:0)
使用express进行API继承是不可能的。检查ZinkyJS,它完全符合您的要求。