简体   繁体   中英

How to override feathersjs defaults service methods

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

This is my service class

/* 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);
  }
};

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

What can I do?

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
  }
}));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM