从服务调用中删除 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;
}
}
})
我使用 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;
}
}
})