Laravel Pjax 总是 abort(422)

使用 spatie/laravel-pjax 的时候遇到总是 abort(422) 的情况,查了一圈大多说原因是渲染的页面里找不到监听的 pjax container。
可检查过后我的页面里都是有 id="pjax-container" 的,请求头里也有 X-PJAX-CONTAINER: #pjax-container

查源码加调试输出找到问题的原因:

spatie/laravel-pjax 里使用了 Symfony\Component\DomCrawler\Crawler 来检查渲染的 DOM 中是否存在指定的 X-PJAX-CONTAINER

1
2
3
4
5
6
7
8
9
10
11
12
// Middleware/FilterIfPjax.php
protected function filterResponse(Response $response, $container)
{
$crawler = $this->getCrawler($response);

$response->setContent(
$this->makeTitle($crawler).
$this->fetchContainer($crawler, $container)
);

return $this;
}

abort(422) 发生在 fetchContainer() 中:

1
2
3
4
5
6
7
8
9
10
protected function fetchContainer(Crawler $crawler, $container)
{
$content = $crawler->filter($container);

if (!$content->count()) {
abort(422);
}

return $content->html();
}

注意到在 filterResponse() 中是把当前的 $response 传给了 $crawler 的,那么如果当前的 $response 其实是个错误页面呢?这里就会发生找不到 #pjax-container 的情况了。

输出一看果然,$response 是个异常信息页面。我遇到的问题是忘了 migrate


处理 Chrome 请求错误 net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION

疑难杂症。

阅读更多
hubble

Hubble 见证 Vue 与 React 突破 10 万 GitHub Stars!

昨天 19 时 9 分前后,Vue 与 React 两个著名现代前端框架双双突破 10 万 GitHub Stars。
并且在同日,晚于 React 诞生的 Vue 首次在 GitHub Star 数量上超越 React,最终率先达到 10 万。

阅读更多
预渲染 Vue SPA(踩坑记录)

使用 prerender-spa-plugin 在 Netlify 上对 Vue SPA 项目进行预渲染以优化 SEO。

阅读更多
使用 GPG key 签名你的 Git 提交

偶然在 GitHub 上注意到有些 commit 记录上有一个绿色的 “Verified“ 标记,感觉酷酷的,就给自己也弄了一个。
过程和遇到的一些小坑做下记录。

阅读更多
npm + Travis CI踩坑记录

自从 `Vue-APlayer@1.1开始,因为比较经常更新 npm 上的版本,于是配了 Travis 的自动构建和 npm 发布。 本来一切都很顺畅,直到最近给RSUITE` 配 CI 时出了各种各样的问题,才发现原来有这么多坑。于是记录下。

Node 版本选择

Node 版本并不能随便乱选,一般最好不要选不是 lts 的版本,比如 7。

RSUITE 最初用的就是 7,结果在第一次自动发布之后有用户提出 issue 说报了奇怪的错,经过检查发现 npm 上的包只有源码,没有构建后的文件。
因为我没有写 before_deploy 而是在 prepublishOnly 钩子里跑的构建命令 npm run build,所以有可能是钩子没有执行。检查了 job logs 发现 node 版本是 7 而 npm 的版本是 3.10,而 prepublishOnly 是 npm@4 开始才有的钩子,所以没有调。

为什么 Node 6 自带 npm@5,而 Node 7 竟然只有 npm@3 呢?这个在最新的 npm@6 中有所回答。如果你在非 lts 版本下执行 npm install -g npm,npm@6 会提醒你 npm 并不支持非 lts 版本。也就是说非 lts 版本的 Node 并不同捆最新的 npm。

把 Node 版本改成 8 之后,再看 job logs,npm 版本就是 5 了,构建和发布也正常了。


Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment