У меня есть объект допустимых параметров запроса для каждого типа объекта для запроса GET к API.
var queryFields = {
'organisation': ['limit', 'page', 'id', 'search'],
'actor': ['limit', 'page', 'id', 'search'],
'version': ['limit', 'page', 'search'],
'product': ['limit', 'page', 'search', 'id', 'type', 'brand', 'model', 'manufacturerSpid'],
'asset': ['limit', 'page', 'search', 'order', 'sort', 'id', 'name', 'currentCustodianSpid', 'currentLocationSpid', 'productSpid', 'search'],
'location': ['limit', 'page', 'search', 'id'],
'workorder': ['limit', 'page', 'search', 'id', 'type', 'status', 'requirementSpid', ],
'move': ['limit', 'page', 'search'],
'transfer': ['limit', 'page', 'search'],
'requirement': ['limit', 'page', 'search', 'id', 'type', 'source', 'productSpid', 'status', ],
'artefact': ['limit', 'page', 'search'],
'attestation': ['limit', 'page', 'search'],
};
Я хочу использовать эту функцию, чтобы убедиться, что только эти действительные параметры принимаются для запроса. Сейчас обещание разрешает false
с допустимыми, недействительными или 0 параметрами. Кажется, проблема с тем, как я фильтрую. Я передаю в тип объекта и запрос. Если в запросе есть параметры запроса, я хочу получить действительные параметры объекта и проверить, что все параметры в req
соответствуют действительным значениям параметров объекта. Если есть недействительные, я хочу разрешить false
. Если нет параметров, я хочу разрешить true
. Если есть только допустимые параметры, я хочу разрешить true
. Есть ли какие-то настройки, которые я могу сделать с этой функцией, чтобы получить такой результат?
function getQueryFields(object) {
if (utils.isDefined(queryFields[object])) return queryFields[object];
return [];
}
function fieldValidator (objType, req) {
return new Promise(function(resolve) {
if (utils.isDefined(req.query)) {
var fields = getQueryFields(objType);
//Only resolve true with valid fields
fields = fields.filter(function(field) { return Object.keys(req.query).indexOf(field) > -1;});
if (Object.keys(req.query) !== Object.keys(fields)) {
resolve(false);
} else {
resolve (true);
}
} else {
resolve(true);
}
});
}