使用onedrive-api的customEndpoint移动文件报错body需为字符串如何解决
问题根源
- 代码存在语法错误:请求体
body对象提前闭合,name参数被放到了body配置之外,导致请求结构错误。 one-drive-api库的customEndpoint方法不会自动序列化JSON格式的请求参数,直接传入普通JS对象不符合该方法对body参数的类型要求(仅支持流、字符串、Buffer三种类型)。
修复后的完整代码
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', // 添加请求头标识JSON格式 headers: { "Content-Type": "application/json" }, // 序列化请求体为JSON字符串,同时修正参数结构 body: JSON.stringify({ 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 }); }); };
核心修改说明
- 修正了对象嵌套语法错误,将
name参数移入请求体内部,符合微软OneDrive移动接口的参数规范 - 使用
JSON.stringify()将JS对象格式的请求参数转为字符串类型,匹配库对body参数的类型要求 - 补充
Content-Type: application/json请求头,告知服务端请求体为JSON格式,避免解析失败
内容的提问来源于stack exchange,提问作者nermineslimane
相关产品推荐
相关产品推荐

