这是我第一次创建查询字符串参数,所以请帮助我。
const { pick } = require('lodash');
const toArray = props =>
(props && props.split ? props.split(',') : props || []).map(item => item.trim());
console.log("this is in filter props: ", toArray)
module.exports = (entities, query) => {
const fields = toArray(query.pick);
const industries = toArray(query.industries);
const technologies = toArray(query.technologies);
const maturity = toArray(query.maturity);
return entities.reduce((accumulator, entity) => {
const hasTecnology = technologies.length
? technologies.every(technology => entity.technologies && entity.technologies.includes(technology))
: true;
const hasIndustury = industries.length
? industries.every(industry => entity.industries && entity.industries.includes(industry))
: true;
const hasMaturity = maturity.length
? maturity.every(maturty => entity.maturity && entity.maturity.includes(maturty))
: true;
const condition = hasTecnology && hasIndustury && hasMaturity;
return condition
? [...accumulator, fields.length ? pick(entity, fields) : entity]
: accumulator;
}, []);
};
async find(ctx) {
const { query } = ctx.request;
const email = ctx.state.user.email;
const userProjects = strapi.cache.users[email].displayCatalog;
let projects = strapi.cache.projects.filter(project => userProjects.includes(project.slug));
if (query.pick || query.industries || query.technologies || query.maturity) {
projects = filter(projects, query);
}
return buildResponse(projects.map(project => hideSensitive(project, userProjects, email)));
},
注:如果我们选择“技术”字段的“前安全”元素或行业字段的“前人工智能”元素,则数据将同时显示“技术安全”和“行业AI.”。
请帮帮我
发布于 2022-05-11 11:30:50
您可以查询所有字段。
把这个放在controller.js文件中。
const queryObj = { ...req.query };
let queryStr = JSON.stringify(queryObj);
queryStr = queryStr.replace(/\b(gt|gte|lt|lte|eq|ne)\b/g, match => `$${match}`);
console.log(queryStr);
const doc1 = await Model.find(JSON.parse(queryStr));在上述代码中
api/projects?technologies[eq]="AI"&industries[eq]="Security"发布于 2022-05-12 22:57:51
const toArray = props =>
(props && props.split ? props.split(',') : props || []).map(item => item.trim());
const hasField = (entity, fields) => {
if (!fields.length) {
return false;
}
for (let i = 0; i < fields.length; i + 1) {
if (entity && entity.includes(fields[i])) {
return true;
}
}
return false;
};
module.exports = (entities, query) => {
const industries = toArray(query.industries);
const technologies = toArray(query.technologies);
const maturity = toArray(query.maturity);
return entities.filter(entity => {
const hasTecnology = hasField(entity.industries, industries);
const hasIndustury = hasField(entity.technologies, technologies);
const hasMaturity = hasField(entity.maturity, maturity);
const condition = hasTecnology || hasIndustury || hasMaturity;
if (condition) {
return entity;
}
return null;
}, []);
};
https://stackoverflow.com/questions/72199635
复制相似问题