在postman中获得API响应但不在离子应用中获得

时间:2017-12-17 19:38:23

标签: angular laravel ionic2

laravel Controller

public function getbrands(Request $request)
{
     $id = DB::table('products')->where('product', '=',$request->product)->first()->id;
    $brands = Product::find($id)->brands;
      return response()->json($brands);

}

这是我在Postman中获得的东西

[
    {
        "id": 2,
        "brand": "Bluemount",
        "pivot": {
            "product_id": 2,
            "brand_id": 2
        }
    },
    {
        "id": 3,
        "brand": "LG",
        "pivot": {
            "product_id": 2,
            "brand_id": 3
        }
    }
]

但我在Ionic App中遇到错误

{…}
_body: "{\"message\":\"Trying to get property of non-object\",\"status_code\":500}"
headers: Object { _headers: Map, _normalizedNames: Map }
ok: false
status: 500
statusText: "Internal Server Error"
type: 2
url: "http://127.0.0.1:8000/api/getbrands"
__proto__: Object { constructor: Response(), toString: Response.prototype.toString() }
call.ts:143:10
Dismissed toast

但是当我在getBrands函数中将$ request->产品更改为'RO'时,如下所示

public function getbrands(Request $request)
{
     $id = DB::table('products')->where('product', '=','RO')->first()->id;
    $brands = Product::find($id)->brands;
      return response()->json($brands);

}

然后我在离子应用程序中获取数据。 PLZ你好,我错了

2 个答案:

答案 0 :(得分:0)

首先确保您的请求标头包含:

Content-Type:Application/jsonAccept: application/json

  

"试图获取非对象的属性\",\" status_code \":500

发生此错误是因为$request->productproduct参数未在请求对象中提供,因此laravel发出警告。因此,请确保在向api发出请求时提供product url参数!

我很确定如果您将此代码添加到您的方法中,您将得到响应:请求中未提供产品!

public function getbrands(Request $request)
{
     if(!request()->has('product'))
     {
         return response(['message'=>'Product not provided in request'], 402);
     }

     $id = DB::table('products')->where('product', '=','RO')->first()->id;
     $brands = Product::find($id)->brands;
     return response()->json($brands);

}

答案 1 :(得分:-2)

请求数据是否正确到达,这似乎不是,您在这里使用结果的方式存在问题。

在这种情况下,您正在运行可能返回空结果的查询null。你需要检查这些。如果随请求发送了无效的product,您最终会收到错误,因为在尝试使用这些结果之前,您没有检查这些查询的结果是否实际返回任何内容。

// could return a null
DB::table('products')->where('product', '=',$request->product)->first();

// also could return a null
Product::find($id);