React调用Odoo 15 API获取数据时遭遇404错误求助
解决React调用Odoo 15 API的404错误
问题原因
你的404错误源于两个核心问题:
- Axios请求结构错误:axios.post的参数顺序混乱,你将请求配置(headers、凭证)与请求体混在同一个参数中,导致服务器无法正确解析请求。
- Odoo API调用方式错误:Odoo 15中没有
/web/dataset/search_read这个直接端点,调用模型的search_read方法需要通过标准JSON-RPC端点/web/dataset/call_kw实现。另外手动JSON.stringify请求体属于冗余操作,axios会自动处理JSON格式请求。
修正后的代码
const getTasks = async () => { try { const response = await axios.post( "http://localhost/web/dataset/call_kw", { jsonrpc: "2.0", method: "call", id: 1, params: { model: "res.users", method: "search_read", args: [[], ["id", "name", "state"]], kwargs: { offset: 0, limit: 0, order: "id ASC", context: { lang: "en_US", tz: "Europe/Brussels" }, }, }, }, { headers: { "Content-Type": "application/json", }, withCredentials: true } ); console.log("查询结果:", response.data); } catch (error) { console.error("查询失败:", error); } };
关键修正说明
- Axios参数规范:axios.post的第二个参数是请求体(直接传JSON对象,无需手动序列化),第三个参数是配置对象(包含headers、
withCredentials等),和你认证接口的调用格式保持一致。 - API端点修正:改用
/web/dataset/call_kw,这是Odoo 15调用模型方法的标准JSON-RPC端点。 - 参数格式调整:
search_read的参数需放在args数组中,第一个元素是查询域(domain),第二个是返回字段列表;额外参数(如排序、分页)放在kwargs对象中。- Odoo的排序参数是
order而非sort,注意参数名对应。 - 无需手动指定
uid,会话Cookie已携带认证信息,服务器会自动识别当前用户。
- 凭证传递:保持
withCredentials: true,确保认证后的会话Cookie被携带到请求中。
额外检查
- 确认Odoo服务器端口:如果Odoo使用非默认端口(如8069),需将URL改为
http://localhost:8069/web/dataset/call_kw。 - 权限验证:确保当前登录用户拥有
res.users模型的读取权限,避免后续出现权限错误。
内容的提问来源于stack exchange,提问作者Rock Lee
相关产品推荐
相关产品推荐

