调用await bcrypt.compare时出现Unexpected identifier错误,求解决方案
解决bcrypt.compare时的「Unexpected identifier」错误
嘿,我之前也踩过这个坑,咱们来一步步搞定它~这个错误大概率是语法或者依赖安装的问题,下面是几个常见的排查方向:
1. 检查await是否在async函数内使用
「Unexpected identifier」最常见的原因就是你在非async函数里用了await,因为await只能在标记为async的函数中运行。比如下面的错误写法:
// 错误写法:普通函数里用await function verifyPassword(password, element) { const isMatch = await bcrypt.compare(password, element.Password); // 这里会报错 }
改成正确的async函数写法就好:
// 正确写法:函数标记为async async function verifyPassword(password, element) { const isMatch = await bcrypt.compare(password, element.Password); console.log(isMatch); // 输出匹配结果 }
如果是在箭头函数里使用,也要加上async:
const verifyPassword = async (password, element) => { const isMatch = await bcrypt.compare(password, element.Password); return isMatch; }
2. 排查bcrypt的安装是否真的成功
虽然你已经装了windows-build-tools和bcrypt,但Windows环境下bcrypt的编译经常出小问题。可以试试下面的操作:
- 先卸载现有bcrypt:
npm uninstall bcrypt - 清理npm缓存:
npm cache clean --force - 重新安装bcrypt:
npm install bcrypt
如果还是不行,推荐改用bcryptjs——这是纯JavaScript实现的版本,不需要编译,用法和bcrypt完全一致,不会有环境依赖问题:
npm uninstall bcrypt npm install bcryptjs
然后代码里替换引入:
// 原来的const bcrypt = require('bcrypt'); const bcrypt = require('bcryptjs'); // compare用法完全不变 const isMatch = await bcrypt.compare(password, element.Password);
3. 检查Node.js版本
如果你的Node.js版本低于8.x,async/await语法是不支持的,也会报类似的语法错误。可以在终端输入node -v查看版本,建议升级到LTS版本(比如16.x或18.x)。
4. 检查代码拼写
虽然可能性较低,但还是确认下element.Password的拼写是否正确,有没有把大写P写成小写,或者变量名写错——不过这种情况一般会报ReferenceError,而不是Unexpected identifier,但还是排查下更稳妥。
内容的提问来源于stack exchange,提问作者JustCurious
相关产品推荐
相关产品推荐

