Node.js中使用await运行读取密码代码报错,如何解决?
解决方法
报错原因是await只能在async函数内部或ES模块的顶层作用域中使用,你的代码是CommonJS脚本,顶层直接用await不符合语法规则。不需要添加exports,以下两种方案都能解决问题:
方案一:用自执行async函数包裹代码
这是最直接的修改方式,无需改变文件类型,把逻辑放在立即执行的async函数里即可:
const read = require('read').read; (async () => { const password = await read({ prompt: "Password: ", silent: true, replace: "*" // 输入的每个字符会显示为星号(可选配置) }); console.log("Your password: " + password); })();
运行命令保持不变:node read.js
方案二:转为ES模块使用顶层await
如果想保留顶层await的写法,可以将文件转为ES模块,有两种实现方式:
- 修改文件后缀:把文件名改为
read.mjs,代码改用import语法:
import { read } from 'read'; const password = await read({ prompt: "Password: ", silent: true, replace: "*" }); console.log("Your password: " + password);
运行命令:node read.mjs
- 配置package.json:在项目根目录创建
package.json,添加"type": "module"字段:
{ "type": "module" }
然后代码改用import语法(文件名仍为read.js),运行命令不变:node read.js
内容的提问来源于stack exchange,提问作者Alexey Starinsky
相关产品推荐
相关产品推荐

