我有一个非常基本的羽毛服务,该服务使用羽毛-猫鼬包将数据存储在猫鼬中。问题在于获取功能。我的模型如下:

module.exports = function (app) {
  const mongooseClient = app.get('mongooseClient');
  const { Schema } = mongooseClient;
  const messages = new Schema({
    message: { type: String, required: true }
  }, {
    timestamps: true
  });

  return mongooseClient.model('messages', messages);
};


当用户运行GET命令时:

curl http://localhost:3030/messages/test


我有以下要求


这实质上是尝试将测试转换为ObjectID。我会怎么做
这样做是针对message属性运行查询
{message:“ test”},我不确定该如何实现。有
没有足够的文档来理解编写或更改此文档
在钩子上。有人可以帮忙吗
当找不到行或与我的某些条件不匹配时,我想返回自定义错误代码(http)。我怎样才能做到这一点?


谢谢

最佳答案

在Feathers before hook中,可以设置context.result,在这种情况下,原始数据库调用将被跳过。所以流程是


get之前的钩子中,尝试按名称查找消息
如果存在,请将context.result设置为找到的内容
否则,什么也不做,它将通过id返回原始的get


它是这样的:

async context => {
  const messages = context.service.find({
    ...context.params,
    query: {
      $limit: 1,
      name: context.id
    }
  });

  if (messages.total > 0) {
    context.result = messages.data[0];
  }

  return context;
}


Errors API中记录了如何创建自定义错误和设置错误代码。

09-25 17:18