Node.js nodejs+中的类成员继承;快车
我不太明白类继承和上下文在nodejs+expressjs中是如何工作的 我有3个文件: api.jsNode.js nodejs+中的类成员继承;快车,node.js,express,inheritance,Node.js,Express,Inheritance,我不太明白类继承和上下文在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.
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
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));
route.js
const API = require('./api.js')
class UserAPI extends API {
constructor () {
super()
}
}
module.exports = UserAPI
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));
我希望看到的是启动时的ID,然后每次执行GET请求时都使用相同的ID。
但是当我执行GET请求时,我有:ERROR:TypeError:无法读取未定义的属性“\u id”
派生基类时,如何访问基类中的成员
谢谢 问题不在于类继承,而在于使用list方法的方式。您将它直接传递给
router.get
,这将不起作用,因为您只传递了对函数的引用,而函数不知道UserAPI
实例的上下文
您可以通过向路由器传递匿名函数来修复此问题。获取,然后执行user.list
,如下所示:
route.js
const API = require('./api.js')
class UserAPI extends API {
constructor () {
super()
}
}
module.exports = UserAPI
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));
使用express实现API继承是不可能的。检查一下,它完全符合您的要求。类是JS原型继承的语法糖。I您的案例当您将函数传递给路由器时,此
不再来自类。获取
。将您的list
转换为箭头函数,它将运行rrouter.get('/',user.list.bind(this))代码>当我更改为router.get('/',user.list.bind(this))代码>我得到实例化的id:undefined
id:undefined
?您甚至没有id
。检查输入错误,这只是console.log中的文本行:console.log(“实例化id:+this.\u id)