Javascript 如何使用猫鼬在羽毛中创建单体资源?

Javascript 如何使用猫鼬在羽毛中创建单体资源?,javascript,feathersjs,Javascript,Feathersjs,我需要一个不是集合而是单个项目的资源。我看不到任何关于以这种方式定制mongoose服务的内容。您可以从find方法返回任何内容,它不必是集合。因此,要为例如/singleton获取对象,您可以执行以下操作: app.use('/singleton', { find: function(params) { return Promise.resolve({ test: 'data' }); } }); 当然,这也可以通过websocketsocket.emit

我需要一个不是集合而是单个项目的资源。我看不到任何关于以这种方式定制mongoose服务的内容。

您可以从
find
方法返回任何内容,它不必是集合。因此,要为例如
/singleton
获取对象,您可以执行以下操作:

app.use('/singleton', {
  find: function(params) {
    return Promise.resolve({
      test: 'data'
    });
  }
});
当然,这也可以通过websocket
socket.emit('singleton::find')
实现。对于猫鼬服务,有两种选择:

1) 延伸 扩展服务,然后使用单个对象调用它,如下所示:

const MongooseService = require('feathers-mongoose').Service;

class SingletonService extends MongooseService {
  find(params) {
    return super.find(params).then(data => data[0]);
  }
}

app.use('/singleton', new SingletonService({
  Model: Todo,
  name: 'todo'
}));
2) 钩子 可能更妙的是,在之后注册一个钩子,从最初请求的集合中检索单例项:

const hooks = require('feathers-hooks');

app.configure(hooks())
  .use('/singleton', mongooseService('todo', Todo));

app.service('singleton').hooks({
  after: {
    find(hook) {
      const firstItem = hook.result[0];
      hook.result = firstItem;
    }
  }
});