Json как объект в параметрах пути в Express 4 - PullRequest
2 голосов
/ 27 мая 2019

Требуется иметь структуру объекта в полученных параметрах от объекта req в выражении.

Например: /users/items[\:]id-:id/items[\:]type-:type

В этом я получаю значение ниже req.params

{
  id: 1,
  type: 'general'
}

при вызове с /users/items:id-1/items:type-general

Есть ли способ получить его, как показано ниже:

{
  items:{
    id: 1,
    type: 'general'
  }
}

РЕДАКТИРОВАТЬ

Другой пример маршрута для поддержки: /users/items:id-1/boxes:type-general

{
  items:{
    id: 1,
  },
  boxes:{
    type: 'general'
  }
}

1 Ответ

1 голос
/ 27 мая 2019

Вы можете попробовать что-то вроде.

app.param(['id', 'type'], (req, res, next, value, key) => {
  req.params.items = req.params.items ? req.params.items : {};
  req.params.items[key] = value;
  // Removing the default properties which gets added.
  delete req.params[key];
  next();
});

Это поможет вам внести изменения в ключ в req.params.

Ссылка: https://expressjs.com/en/4x/api.html#app.param

[или]

Другой способ - использовать промежуточное ПО в отношении вашего отредактированного вопроса. Вы можете попробовать что-то вроде

const getParamsAsJSONObject = (req, res, next) => {
  const [emptypart, ...parts] = req.url.split('/');
  console.log(parts);
  req.customParams = parts.reduce((paramsObj, currentPart) => {
    console.log(paramsObj);
    console.log(currentPart);
    const [parentKey, childKeyValue] = currentPart.split(':');
    paramsObj[parentKey] = paramsObj[parentKey] ? paramsObj[parentKey] : {};   
    const [childKey, childValue] = childKeyValue.split('-');
    paramsObj[parentKey][childKey] = childValue;
    return paramsObj;
  }, {});
  next();
};

app.use('/users', getParamsAsJSONObject, (req, res, next) => {
  console.log(req.customParams);
  // Remaining Piece of the code to be added.
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...