【发布时间】:2017-12-20 10:40:51
【问题描述】:
我最近尝试使用 nodejs 中的 es6 类更新我的项目代码结构。
这是控制器类的样子
class TaskController {
constructor(io, redisClient) {
this.socket = io;
this.redisClient = redisClient;
}
create(req, res) {
let taskDetails = req.body;
taskDetails.owner = req.user.id;
let errorFields = Validation.validate(taskDetails, [
{ name: 'title', type: 'text' }
]);
if (errorFields.length > 0) {
return ErrorHandler.handleError(res, errorFields);
}
...`
}
}
这是我在路由文件中初始化类的方式
module.exports = (app, io, redisClient) => {
let taskController = new TaskController(io, redisClient);
router.post('', middlewares.isAuthorized('task:create'), taskController.create);
app.use('/api/tasks', middlewares.isAuthenticated(), router);
};
问题是在点击 create api 时,this 对象在 create 函数中未定义。
通过一点调试,我知道在注册路由时调用了构造函数。
但 taskController 在实际调用 create 函数时会丢失上下文。
我怎样才能使它与这种结构一起工作,或者我必须恢复到 module.exporting 每个功能任务控制器?
【问题讨论】:
标签: node.js class ecmascript-6