You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js报错:password参数未定义,代码无该变量求解决

问题

运行Node.js应用时终端持续抛出TypeError:

TypeError: The "password" argument must be of type string or an instance of ArrayBuffer, Buffer, TypedArray, or DataView. Received undefined

错误栈指向@african-blockchain-center/common模块的加密工具文件,但本地代码里没定义password变量,调试数小时也没在node_modules里找到相关变量。

错误栈详情:

TypeError: The "password" argument must be of type string or an instance of ArrayBuffer, Buffer, TypedArray, or DataView. Received undefined
    at check (node:internal/crypto/scrypt:89:14)
    at Object.scryptSync (node:internal/crypto/scrypt:70:13)
    at Object.<anonymous> (/Users/gokeadewuyi/abc/algorand/node_modules/@african-blockchain-center/common/build/utils/encryption.js:8:30)
    at Module._compile (node:internal/modules/cjs/loader:1218:14)
    at Module._compile (/Users/gokeadewuyi/abc/algorand/node_modules/source-map-support/source-map-support.js:568:25)
    at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
    at require.extensions..jsx.require.extensions..js (/private/var/folders/7m/t45z59v16x51rby86nhtvx2m0000gn/T/ts-node-dev-hook-9974711466048651.js:114:20)
    at Object.nodeDevHook [as .js] (/Users/gokeadewuyi/abc/algorand/node_modules/ts-node-dev/lib/hook.js:63:13)
    at Module.load (node:internal/modules/cjs/loader:1081:32)
    at Function.Module._load (node:internal/modules/cjs/loader:922:12)

本地代码:
app.ts

import express from "express";
import "express-async-errors";
import { json } from "body-parser";
import cookieSession from "cookie-session";
import {
  errorHandler,
  NotFoundError,
  currentUser,
} from "@african-blockchain-center/common";

const app = express();
app.set("trust proxy", true);
app.use(json());
app.use(
  cookieSession({
    signed: false,
    secure: true,
  })
);
app.use(currentUser);

app.all("*", async (req, res) => {
  throw new NotFoundError();
});

app.use(errorHandler);

export { app };

index.ts

import { app } from "./app";

const start = async () => {
  if (!process.env.JWT_KEY) {
    throw new Error("JWT_KEY must be defined");
  }
 

  app.listen(3000, () => {
    console.log("algorand-service reporting for duty!");
  });
};

start();
解决方案

这个问题核心是@african-blockchain-center/common模块的加密工具(encryption.js)调用scryptSync时,传入的password参数是undefined,而这个参数大概率依赖某个你没配置的环境变量。

  • 定位依赖的环境变量
    直接打开node_modules/@african-blockchain-center/common/build/utils/encryption.js,看第8行附近的代码,确认scryptSync的第一个参数(就是报错的password)是从哪来的。这类加密工具一般会读取环境变量,比如ENCRYPTION_KEY这类名称的变量。

  • 补充缺失的环境变量
    根据找到的变量名,在项目的环境变量里添加对应值(用足够长的随机字符串就行)。比如如果是ENCRYPTION_KEY,就在.env文件里加:

    ENCRYPTION_KEY=your-random-encryption-key-here
    

    要是用了dotenv,得确保代码开头先导入dotenv/config,保证环境变量在模块加载前就生效。

  • 调整代码加载顺序
    有些模块在导入阶段就会执行加密逻辑(你这错误栈就是模块加载时报错),所以得先加载环境变量再导入app。修改index.ts:

    import dotenv from "dotenv";
    dotenv.config();
    
    import { app } from "./app";
    
    const start = async () => {
      if (!process.env.JWT_KEY) {
        throw new Error("JWT_KEY must be defined");
      }
      if (!process.env.ENCRYPTION_KEY) {
        throw new Error("ENCRYPTION_KEY must be defined");
      }
    
      app.listen(3000, () => {
        console.log("algorand-service reporting for duty!");
      });
    };
    
    start();
    
  • 检查版本兼容性
    要是配置环境变量后还报错,看看@african-blockchain-center/common的版本和你的Node.js版本兼容不。scryptSync的参数要求在不同Node.js版本里可能有差异,试试升级或降级这个模块版本。

内容的提问来源于stack exchange,提问作者dayo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 18:40:02