CNode

egg 项目 yield rray, or object, but the following object was passed: "undefined

问答
RRock-1发布于9 年前最后回复9 年前16 回复4989 浏览0 收藏

nodejs.TypeError: You may only yield a function, promise, generator, a rray, or object, but the following object was passed: "undefined 这是什么error

查看回复

回复 (16)

A
AnzerWall#1·9 年前

@Rock-1 你egg用得不对

M
magicdawn#2·9 年前

yield 就是等... 你没法等一个 undefined 值 你没法叫醒一个装睡的人 这个意思...

I
i5ting#4·9 年前
R
Rock-1#5·9 年前
R
Rock-1#7·9 年前
引用 i5ting@Rock 1 get的返回类型是什么?

@i5ting 是个array,打印的时候是个undefined,我怀疑是不是我用egg用的不对

I
i5ting#8·9 年前
引用 Rock-1@i5ting 是个array,打印的时候是个undefined,我怀疑是不是我用egg用的不对

@Rock-1 yield后面可以接array,但array里的元素类型是thunk或promise么?让你看文档你就是不看啊

A
AnzerWall#9·9 年前
引用 Rock-1@i5ting 是个array,打印的时候是个undefined,我怀疑是不是我用egg用的不对

@Rock-1 你配置没配好,导致mysql单例没有加载成功,所以app.mysql是个原始Singleton而不是mysql的实例,原始Singleton带有get这个函数是用于支持多数据库的。所以实际上你是get是触发了获取一个名为cpap_user的mysql实例,而不是mysql实例的get一个table的操作,但是实际上你没有配置多数据库,所以就返回了undefined。 你企图yield 一个undefined,所以报错了

详细见 https://github.com/eggjs/egg/blob/73095e2c04d6493d34061c51272b70d5b6c21aa9/lib/egg.js#L308 还有 https://github.com/eggjs/egg/blob/73095e2c04d6493d34061c51272b70d5b6c21aa9/lib/core/singleton.js#L47

建议贴一下你mysql的配置

I
i5ting#11·9 年前
引用 AnzerWall@i5ting 狼叔冷静

@AnzerWall 哈哈,没事

R
Rock-1#12·9 年前
引用 AnzerWall@Rock 1 你配置没配好,导致mysql单例没有加载成功,所以app.mysql是个原始Singleton而不是mysql的实例,原始Singleton带有get这个函数是用于支持多数据库...

@AnzerWall

 exports.mysql = {
  // 单数据库信息配置
  client: {
    // host
    host: '127.0.0.1',
    // 端口号
    port: '3306',
    // 用户名
    user: 'root',
    // 密码
    password: '',
    // 数据库名
    database: 'efang',
  },
  // 所有数据库配置的默认值
  default: {
        database: 'egg_demo'
  },
  // 是否加载到 app 上,默认开启
  app: true,
  // 是否加载到 agent 上,默认关闭
  agent: false,
};


R
Rock-1#13·9 年前
引用 AnzerWall@Rock 1 你egg用得不对

@AnzerWall 这个就是单个数据链接,我看官网上是这样写的

R
Rock-1#15·9 年前
引用 AnzerWall@Rock 1 库和插件版本呢

@AnzerWall "egg-mysql": "^2.0.0",

A
atian25#16·9 年前

去官方提 issue 吧,最好附上一个最小可复现问题的仓库

https://github.com/eggjs/egg/issues

参与回复
登录后即可参与回复。登录