我需要一个不是集合而是单个项目的资源。我看不到任何有关以这种方式自定义 mongoose 服务的内容。
最佳答案
您可以从您的find
方法返回任何东西,它不一定是一个集合。所以要获得一个对象,例如/singleton
你可以这样做:
app.use('/singleton', {
find: function(params) {
return Promise.resolve({
test: 'data'
});
}
});
这当然也可以通过 websocket socket.emit('singleton::find')
工作。对于 Mongoose 服务,有两种选择:
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) Hook
使用 feathers-hooks 可能会更好,注册一个 after
Hook ,从最初请求的集合中检索单例项目:
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;
}
}
});
关于javascript - 如何用 Mongoose 在羽毛中创建单例资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31671746/