首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何覆盖羽毛How默认服务方法

如何覆盖羽毛How默认服务方法
EN

Stack Overflow用户
提问于 2017-12-08 18:11:59
回答 1查看 2.7K关注 0票数 1

我有一个使用feathers generate service命令创建的羽毛服务。我想重写它对create方法的定义。

这是我的服务班

代码语言:javascript
复制
/* 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方法上的测试显示了原始方法的结果,而不是我的方法。

我能做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-10 05:13:38

数据库适配器公共API中记录了如何覆盖和扩展现有服务。您可以通过设置钩子或扩展现有的ES6类来使用ES6:

代码语言:javascript
复制
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
  }
}));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47720002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档