如何覆盖Feathers.js默认服务方法 [英] How to override feathersjs defaults service methods

查看:101
本文介绍了如何覆盖Feathers.js默认服务方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用feathers generate service命令创建的feathersjs服务.我想覆盖其对create方法的定义.

I have a feathersjs service created using the feathers generate service command. I want to override its definition of create method.

这是我的服务课程

/* eslint-disable no-unused-vars */
// Initializes the `userGroup` service on path `/usergroup`
const createService = require('feathers-sequelize');
const createModel = require('../../models/user-group.model');
const hooks = require('./user-group.hooks');
const filters = require('./user-group.filters');
const async = require('async');

module.exports = function () {
  const app = this;
  const Model = createModel(app);
  const paginate = app.get('paginate');

  const options = {
    name: 'usergroup',
    Model,
    paginate,
    create: fnCreateGroup // documentation says this allows you to create your own create method
  };

  function fnCreateGroup(data, params) {
    let json = {
      done: false
    };
    let permissionIds = Object.keys(data.permissionList), inIds = [];
    for (let i in permissionIds) {
      if (data.permissionList[permissionIds[i]]) {
        inIds.push(parseInt(permissionIds[i]));
      }
    }
    if (inIds.length === 0) {
      json.cause = 'You must provide the permission List';
      return Promise.resolve(json);
    }
    async.parallel([
      function (cb) {
        Model.create({
          groupName: data.groupName
        }).then(function (ug) {
          cb(null, ug);
        }, function (err) {
          cb(err, null);
        });
      },
      function (cb) {
        app.models.permissions.findAll({
          where: {
            id: {
              $in: inIds
            }
          }
        }).then(function (plist) {
          cb(null, plist);
        });
      }
    ]
      , function (err, results) {
      if (typeof err !== 'undefined' && err !== null) {
        json.err = err;
        return Promise.resolve(json);
      } else {
        let permissions = results[1], group = results[0];
        for (let i = 0; i < permissions.length; i++) {
          group.addPermission(permissions[i]);
        }
        json.done = true;
        json.id = group.id;
        return Promise.resolve(json);
      }
    });
  }

  // Initialize our service with any options it requires
  app.use('/usergroup', createService(options));

  // Get our initialized service so that we can register hooks and filters
  let service = app.service('usergroup');

  service.hooks(hooks);

  if (service.filter) {
    service.filter(filters);
  }
};

对create方法的测试显示的是原始方法的结果,而不是我的结果.

The test on create method shows the result of original method and not mine.

我该怎么办?

推荐答案

如何覆盖和扩展现有服务,请参见挂钩或扩展现有的ES6类:

How to override and extend existing services is documented in the database adapter common API. You can use hooks by setting hook.result or extend the existing ES6 class:

const Service = require( 'feathers-sequelize').Service;

class MyService extends Service {
  create(data, params) {
    data.created_at = new Date();

    return super.create(data, params);
  }
}

app.use('/todos', new MyService({
  paginate: {
    default: 2,
    max: 4
  }
}));

这篇关于如何覆盖Feathers.js默认服务方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆