我正在使用Nodejs创建一个足智多谋的api。我创建了一个UserController类,它将包含常用方法。我试图在我的构造函数类中分配一些变量以在这些方法中使用。
该变量可能会在以后更改为某个repo类obj。所以我想知道如何在我的索引函数中使用我在构造函数中设置的变量。
nodejs:v4.5.0
当我运行导航到调用索引函数的/ users /时,我得到了这个。
```
TypeError: Cannot read property 'name' of undefined
```
路线
```
var express = require('express');
var router = express.Router();
var controller = require('../controllers/user.controller');
controller = new controller();
router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.store);
router.put('/:id', controller.update);
router.delete('/:id', controller.destroy);
module.exports = router;
```
控制器 ```
'use strict';
var User = require('../models/user.model');
class UserController {
constructor() {
this.name = "NameHere";
}
index(req, res) {
console.log("My Name Is: " + this.name);
}
show(req, res) {
}
update(req, res) {
}
store(req, res) {
}
destroy(req, res) {
}
}
module.exports = UserController;
```
答案 0 :(得分:0)
您可以像这样编写路由器:
<强>控制器强>
'use strict';
var data = {
name : 'NameHere'
};
module.exports = {
index(req, res) {
console.log("My Name Is: " + data.name);
},
show(req, res) {
},
update(req, res) {
},
store(req, res) {
},
destroy(req, res) {
}
};
路线
var controller = require('../controllers/user.controller');
router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.store);
router.put('/:id', controller.update);
router.delete('/:id', controller.destroy);
module.exports = router;
如果您确实需要使用控制器的不同实例,或者如果您需要将一些配置选项传递给它,那么您可以执行以下操作:
<强>控制器强>
'use strict';
module.exports = function( options ) {
var data = {
name : options.name
};
return {
index(req, res) {
console.log("My Name Is: " + data.name);
},
show(req, res) {
},
update(req, res) {
},
store(req, res) {
},
destroy(req, res) {
}
};
}
路线
var controller = require('../controllers/user.controller')({
name : 'some name'
});
router.get('/', controller.index);
router.get('/:id', controller.show);
router.post('/', controller.store);
router.put('/:id', controller.update);
router.delete('/:id', controller.destroy);
module.exports = router;