【问题标题】:'TypeError: Converting circular structure to JSON' with Express'TypeError:使用 Express 将循环结构转换为 JSON'
【发布时间】:2020-06-16 10:00:23
【问题描述】:

我的项目使用 NodeJS 和 Express,并在用户登录索引时设置它会保留会话值。

req.session.user

{ adminID: 3, 用户名: 'admin', 密码: 'admin' }

我想从 MYSQL 中获取数据,所以我像这样使用 Knex。

router.get('/profile/user/me', (req, res, next) => {
    let user = req.session.user;
    if(user) {
        try {
            let me = req.session.user.adminID;
            let info = knex('admin_account').where('adminID', `%${me}%`)
            res.json(info)
        } catch (e) {
            console.log(e);
        }
        res.sendFile(path.join(__dirname + '/../public/personal_information.html'));
        return;
    }else{
         res.redirect('/');
    }
});

在我看来,我认为如果我们完成登录,我们会有一个 req.session.user 我会用它和 Knex 一起获取数据。

【问题讨论】:

  • 您的问题是什么?错误很可能是由于res.json(info) 线而引发的。
  • @ViktorGusev 我想创建一个 API 来从每个人那里获取信息,但是根据上述主题,当测试 API 出错时
  • @Merphy 在 res.json(info) 之前 console.log(info) 的输出是什么?

标签: javascript json express knex.js


【解决方案1】:

req.sessions.userinfo 可能具有相同的值,但不是您应该使用的相同类型,首先检查变量信息console.log(info) 的值,您可能需要json.parse() 它或@ 987654325@它,如果您想将其作为回复发送。

【讨论】:

    【解决方案2】:

    您需要执行查询生成器并在返回之前等待结果:

    knex('admin_account').where('adminID', me)
      .then(info => {
        res.json(info)
      })
      .catch(err => {
         console.log(e);
      });
    

    而且您不需要% 通配符,除非您使用like 运算符进行松散的字符串比较。

    关于代码的另一件事是,您似乎试图同时返回 res.jsonres.sendFile(path.join(__dirname + '/../public/personal_information.html')),这是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 2018-10-05
      • 2016-01-22
      • 2017-06-29
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多