我的数据库中存储了一大段文本,可以成功地从我的
DB
、dd()
和 log::debug()
内容中提取它,没有任何问题。文字可以在这里看到:https://pastebin.com/KQNYW623
当我尝试返回文本的 JSON 响应时,问题就出现了。在
api.php
路线文件中安装干净的 Lumen 5.7 时,我有以下路线:
$router->get('/', function () use ($router) {
return json_encode("*insert large content here*"); //this is where the big text goes, I won't paste it fully here but it's here in my code as a string
});
如果我访问此路线,我会看到一个空白页面。我的屏幕、Postman 或
curl
上绝对没有任何内容出现。错误日志中没有任何错误,什么也没有。只是空白。
如果我放置比大文本小得多的其他内容(例如 hello world),则输出响应没有问题。有人可以解释一下这个问题的根本原因是什么吗? Lumen/Laravel 中的回复有字符限制吗?
--- 更新 ---
因此,如果我这样做
echo response()->json($string)
(其中 $string
)是一个保存长文本的变量),我可以看到字符串已被编码为 JSON,并且已添加响应标头,所有这些都输出在屏幕上。然而,执行 return response()->json($string)
仍然会继续返回空白响应。
有人知道为什么
return
不从response()
发回数据吗?
要像laravel一样返回带有lumen的json响应,我想你可以看看:
https://lumen.laravel.com/docs/5.7/responses
json 方法会自动将 Content-Type 标头设置为 application/json,并使用 json_encode 将给定数组转换为 JSON
此外,如果您有一个与数据库关联的模型,您可以自动将 json 转换为数组,请参阅:
如果您的数据库具有包含序列化 JSON 的 JSON 或 TEXT 字段类型,则将数组转换添加到该属性将自动将该属性反序列化为 PHP 数组
https://laravel.com/docs/5.7/eloquent-mutators#array-and-json-casting
解决了问题:我从这里获取的 CORS 中间件类:在此处输入链接描述
Content-Length
> 6K 的响应被操纵为长度为 0,但仍返回 200 响应。感谢大家的帮助和建议。
我遇到的问题听起来很相似,并且也有相同的 CORS 中间件。您是如何解决这个问题的?