最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

使用快速路由器维护es6类状态超过请求

IT培训 admin 9浏览 0评论

使用快速路由器维护es6类状态超过请求

我最近尝试使用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时,在create function中未定义此对象。

通过一些调试,我知道在注册路由时会调用构造函数。

但是当实际调用create函数时,任务Controller会丢失上下文。

如何使其与此结构一起使用或者我是否必须恢复到module.exporting每个功能任务控制器?

回答如下:

您可以使用bind方法绑定上下文。通过创建功能。

router.post('', middlewares.isAuthorized('task:create'), taskController.create.bind(taskController));

create方法正在丢失上下文,因为它是通过post方法在不同的范围内调用的。

您可以使用bind方法绑定上下文,该方法返回一个函数并将该函数传递给create方法。

使用快速路由器维护es6类状态超过请求

我最近尝试使用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时,在create function中未定义此对象。

通过一些调试,我知道在注册路由时会调用构造函数。

但是当实际调用create函数时,任务Controller会丢失上下文。

如何使其与此结构一起使用或者我是否必须恢复到module.exporting每个功能任务控制器?

回答如下:

您可以使用bind方法绑定上下文。通过创建功能。

router.post('', middlewares.isAuthorized('task:create'), taskController.create.bind(taskController));

create方法正在丢失上下文,因为它是通过post方法在不同的范围内调用的。

您可以使用bind方法绑定上下文,该方法返回一个函数并将该函数传递给create方法。

发布评论

评论列表 (0)

  1. 暂无评论