从服务调用中删除 context.query.params,但将其保留为 URL 参数

Remove context.query.params from the service call, but keep it as a URL parameter

我使用 feathersjs 和 mongoose 创建了一个 "products" 服务。 这是我的服务:

// Initializes the `products` service on path `/products`
const createService = require('feathers-mongoose');
const createModel = require('../../models/products.model');
const hooks = require('./products.hooks');

module.exports = function (app) {
  const Model = createModel(app);
  const paginate = app.get('paginate');

  const options = {
    name: 'products',
    Model,
    paginate
  };

  // Initialize our service with any options it requires
  app.use('/products', createService(options));

  // Get our initialized service so that we can register hooks and filters
  const service = app.service('products');

  service.hooks(hooks);
};

我的 mongoose 模型包括一些字段,如 "name"、"category" 等。但这对我的问题来说并不重要。

当我这样调用我的服务时:

http://localhost:3030/products?lang=fr

由于"lang"不是我的数据库产品的条目,所以我没有得到结果。

有没有办法从查询中删除 "lang" 参数,但保留它以便在我的挂钩中使用它。

我试过 discardQuery,但它会删除参数,我不能再在我的钩子中使用它了。

感谢您的帮助

解决方案

感谢 daff 我找到了一个解决方案,在一个 before 钩子中,我像这样附加了我的 params.query.lang:

context.params.lang = context.params.query.lang;

在我丢弃上下文之后。params.query.lang 以便将其从查询中删除

commonHooks.discardQuery('lang')

然后我就可以在我的 after hook 中得到这样的 lang 参数:

let lang = context.params.lang;

为什么不在删除它之前将其添加到其他地方,例如 context 对象或 context.params

const { omit } = require('lodash');

app.service('products').hooks({
  before: {
    find(context) {
      context.params.language = context.params.query.language;

      context.params.query = omit(context.params.query, 'language');

      return context;
    }
  }
})