Node.js 错误笔记 | Node.js 全栈开发中常见的错误及思考

本文收录了笔者 Node.js 使用开发开发中遇到的各种错误,解决后第一时间把症状、解决方案、解决思路卸载这里,有空的话还会分析补上引发错误的原因。

错误太多,如果遇到疑难杂症,请使用导航栏的 搜索 功能试试。

主要是错误及思考,持续更新中。

Hexo Next 升级分页出现问题

环境

  • 系统: macOS 10.13.6
  • Node 版本: v12.13.1

错误信息

意外升级 Hexo 后 Next 主题的上一页、下一页分页按钮显示为代码:

<i class="fa fa-angle-left" aria-label="上一页"></i>

如果编辑 HTML 会发现该部分显示为实体:

&lt;i class="fa fa-angle-left" aria-label="上一页"&gt;&lt;/i&gt;

解决方法

  1. 降级 hexo 到没有问题的版本
  2. 或者升级 next 主题到没有问题的版本。

我是托管在 Github 上的,通过查看 package.json 发现没有出问题之前 hexo 版本是 3.8.0,next 版本是 7.0.0

错误原因

hexo 与 next 版本兼容问题

Nodejs &#x 开头 unicode cheerio 乱码

环境

  • 系统: macOS 10.13.6
  • Node 版本: v12.13.1

错误信息

Node.js 使用 axios 下载网页,使用 cheerio 抓取数据时,得到的中文是乱码(unicode)以 &#x 开头

解决步骤
一开始以为是网页编码问题,后面在 axios 请求结果中输出也不是乱码的,最后定位到 cheerio 中。

var $ = cheerio.load("<h1><p>你好</p><em>Hello,World!</em></h1>");
var title = $('h1').text(); //你好Hello,World!
var cnt = $('h1').html();//<p>&#x4F60;&#x597D;</p><em>Hello,World!</em>

解决方法

治标不治本,利用库进行编码转换:

var he = require('he');
he.decode(str);

治标:
cheerio 本身默认是转实体的,参考cheerio html 方法中文字体被转换问题,求教

cheerio.load(html,{ decodeEntities: false });

错误原因

cheerio 的问题

node-sass 安装失败

环境

  • 系统: macOS 10.13.6
  • Node 版本: v12.13.1
  • node-sass 版本: 4.13.1

错误信息

/node_modules/node-sass: Command failed.
Exit code: 1
Command: node scripts/build.js
...
ERROR:root:code for hash md5 was not found.
...
ValueError: unsupported hash type md5
ERROR:root:code for hash sha1 was not found.
...
/node_modules/node-sass
gyp ERR!

解决步骤
一开始按照常规的 node-sass 安装错误 关键字进行搜索,都是比较老的安装失败、安装错误等信息,要么是网络、要么是 node 版本。

还有一个 stackoverflow 的回答 最为接近,在 node-sass 发行文档中,它列出了对于 Node v12,需要安装 node-sass v4.12 及更高版本。

但是这个答案也被排除。最后逐行找错误,发现关键错误行:

ERROR:root:code for hash md5 was not found.

初步怀疑是 openssl 问题,果然一搜就解决了。

解决方法

取消链接 openssl:

brew unlink openssl

重新安装 python:

brew reinstall python@2

详细去 stackoverflow 搜索。

错误原因

分析不出来,前端时间折腾过 openssl