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

模块导出异常:调用api.listRoles()报GraphQLError(login可正常调用)

问题分析与解决方案

嘿,我一眼就发现问题所在了——你的模块导出的是一个函数,而不是直接导出包含方法的对象,这就是调用api.listRoles()时报错的核心原因。

先看你的模块代码:

module.exports = function() {
  const LOGIN_URL = 'https://localhost/admin/login'
  const URL_ROOT = 'http://localhost/managed/'
  function createHeaders() {
    return {
      Accept: 'application/json',
      'Content-Type': 'application/json',
      Authorization: 'Basic RW1....M='
    }
  }
  function login(userInfo) {
    return post(LOGIN_URL, userInfo)
  }
  function listRoles() {
    return get(URL_ROOT + 'role?_queryFilter=true')
  }
  return { login, listRoles, ... }
}

当你用require()导入这个模块时,你拿到的其实是这个外层的函数,而不是函数执行后返回的包含login、listRoles的对象。所以如果你的导入代码是这样的:

const api = require('./your-module-file')
api.listRoles() // 这里api是个函数,根本没有listRoles方法,当然会报错!

有两种简单的解决办法:

  • 方法一:导入时立即执行函数
    导入的时候直接调用这个导出的函数,拿到它返回的对象:

    const api = require('./your-module-file')()
    api.listRoles().then(...) // 现在就能正常调用方法了
    
  • 方法二:修改模块的导出方式
    如果你的模块不需要在导出时做动态初始化(比如现在的代码里没有依赖外部参数的逻辑),可以直接去掉外层函数,直接导出方法对象:

    const LOGIN_URL = 'https://localhost/admin/login'
    const URL_ROOT = 'http://localhost/managed/'
    function createHeaders() {
      return {
        Accept: 'application/json',
        'Content-Type': 'application/json',
        Authorization: 'Basic RW1....M='
      }
    }
    function login(userInfo) {
      return post(LOGIN_URL, userInfo)
    }
    function listRoles() {
      return get(URL_ROOT + 'role?_queryFilter=true')
    }
    module.exports = { login, listRoles } // 注意这里删掉了多余的无效...语法
    

    这样导入后直接调用api.listRoles()就完全没问题了。

另外提个小细节:你原来代码里return { login, listRoles, ... }中的...是无效语法,实际使用时要替换成你需要导出的其他方法,或者直接删掉它哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:49:54