One-drive-api : тело должно быть строкой

#node.js #onedrive

Вопрос:

Я использую библиотеку one-drive-api и пытаюсь реализовать элемент enpoint для meve из папки в другую вот мой код

 exports.moveItem = (req, res) => {
  let { item_id, move_to_id, new_name } = req.body;
  oneDriveAPI.items
    .customEndpoint({
      accessToken: accessToken,
      URL: "/me/drive/items/" item_id,
      method: 'PATCH',
      body: {
        parentReference: {
          id: move_to_id},
        },
        name: new_name,
      },
    })
    .then((r) => {
      res.status(200).send({ drives: r });
    })
    .catch((e) => {
      res.status(500).send({ error: e.message });
    });
};
 

И я получаю эту ошибку

  {
    "error": "The `body` option must be a stream.Readable, string or Buffer"
}
 

Вот ссылка на документ от Microsoft : ссылка
и вот библиотека, которую я использую : npm

Ответ №1:

Вы можете попробовать это:

 let { item_id, move_to_id, new_name } = req.body;
      let body_req = { parentReference: { id: move_to_id } };
      let stringified = JSON.stringify(body_req);
      let b = Buffer.from(stringified);
      oneDriveAPI.items
        .customEndpoint({
          accessToken: accessToken,
          url: `/me/drive/items/${item_id}`,
          method: 'PATCH',
          body: b,
        })
        .then((r) => {
          res.status(200).send({ moved: r });
        })
        .catch((e) => {
          res.status(500).send({ error: e.message });
        });
 

Ответ №2:

Вы должны быть в состоянии заставить это работать, предварительно натянув тело.

 body: JSON.stringify({
  parentReference: {
    id: move_to_id},
  },
  name: new_name,
}),
 

Похоже, это ошибка из got библиотеки, которую использует ваш onedrive-api пакет. Передача строки должна быть в порядке, но если нет, то может возникнуть проблема с тем, как пакет onedrive-api настраивает got запрос

Комментарии:

1. Я попытался JSON-скомпоновать его , даже преобразовать в буфер, но он все равно не проснулся

2. Если верно, что объект и строка JSON не работают, возможно, стоит открыть проблему в onedrive-api репозитории. Возможно, это связано с тем, как они настраивают got запрос. github.com/dkatavic/onedrive-api/issues