调用Django REST Framework商品详情接口返回404且URL含[object Object]如何解决
报错原因
请求路径中出现[object Object]的核心原因是调用getProductDetails方法时传入的参数不是预期的字符串类型slug值,而是直接传入了完整的商品对象。JS/TS进行模板字符串拼接时会自动调用对象的toString()方法,最终拼接出/product/[object Object]/的非法请求路径,后端路由无法匹配该路径规则,因此返回404错误。
修复方案
- 修正
getProductDetails方法的调用传参,仅传入商品对象中的slug字段值,不要传入完整商品对象:
// 错误调用示例:直接传入商品对象 this.productService.getProductDetails(product).subscribe() // 正确调用示例:仅传入商品对象的slug属性 this.productService.getProductDetails(product.slug).subscribe()
- 可选优化:给
getProductDetails方法增加运行时参数校验,避免后续再出现同类传参错误:
getProductDetails(slug: string): Observable<any>{ // 运行时校验参数类型,非法参数直接抛出明确错误 if (typeof slug !== 'string') { throw new Error('getProductDetails方法要求传入字符串类型的slug参数') } return this.http.get<any>(`${this.baseurl}/product/${slug}/`, {headers: this.httpHeaders}) }
- 补充检查:确认Django总路由已经将商品模块路由注册到
product/前缀下,示例配置如下:
# 项目根目录的urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 注册商品模块路由,确保前缀为product path('product/', include('你商品模块的app名称.urls')), ]
内容的提问来源于stack exchange,提问作者FirmCiti Inc
相关产品推荐
相关产品推荐

