0

我使用feathersjs 和mongoose 创建了一个“产品”服务。这是我的服务:

// 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);
};

我的猫鼬模型包括一些字段,如“名称”、“类别”等。但这对我的问题并不重要。

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

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

由于“lang”不是我的数据库产品的条目,我没有得到任何结果。

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

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

谢谢你的帮助

解决方案

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

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

在我丢弃我的 context.params.query.lang 以将其从查询中删除之后

commonHooks.discardQuery('lang')

然后我能够在我的后挂钩中获得这样的 lang 参数:

let lang = context.params.lang;
4

1 回答 1

0

你为什么不把它添加到其他地方,比如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;
    }
  }
})
于 2018-04-24T15:24:13.757 回答