我正在Laravel中制作一个api,以便与前端的Vue通信。
首先,我不想每次页面加载时都向数据库发出请求。
解决方案:向数据库发出第一个请求,保存到json文件,然后返回它,下一个请求将仅发送json文件而没有数据库请求。我将在1天后恢复。
问题:一切正常,但响应的格式无效。因此Vue无法隐藏json文件并呈现页面
代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Product;
use Storage;
class ProductController extends Controller
{
public function home ()
{
$file = 'json\products.json';
$fileExists = Storage::disk('local')->exists( $file );
$storagePath = Storage::disk('local')->path( $file );
if ( $fileExists ) {
if ( time () - 86400 < filemtime ($storagePath ) ) {
return Storage::get($file);
}
}
$products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();
//Storage::disk('local')->put('json\products.json', json_encode($products, JSON_PRETTY_PRINT) ); //Doesnot Work
Storage::disk('local')->put('json\products.json', response()->json(['products' => $products ])); // Doesnot Work
return response()->json(['products' => $products ] , 200); // This response works , and vue catches and reads perfectly
}
}
已编辑:返回Storage :: get($ file);
答案 0 :(得分:0)
像这样解决:
return cache()->remember($cacheKey, 1440 , function () {
$products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();
return ['products' => $products];
});