【问题标题】:API controller resolution returning undefinedAPI 控制器解析返回未定义
【发布时间】:2021-08-14 10:20:53
【问题描述】:

基本上,我的控制器没有正确返回承诺的解决方案。

  getUserByIdApi: async (req, res) => {
      const googleId = req;
      try {
        res.json(await fetchUserByIdFromDb(googleId))
        const user = await fetchUserByIdFromDb(googleId);

        res.send(user.googleId)
      } catch (e) {
          console.log(e);
          res.status(400).json(e);
      }
  }
};

据说TypeError: Cannot read property 'send' of undefined

fetchUserByIdFromDb:

const fetchUserByIdFromDb = async (Id) => {
  try {
    const [rows] = await connection.query(findUserByIdQuery, (googleId));
    console.log('orm: ', rows[0].googleId)
    return rows[0];
  } catch (e) {
    throw new Error(e);
  }
};

如何从控制器获取 res 以响应正确的值?我希望它返回用户的 ID,老实说,来自用户的任何内容。

我正在使用 node.js 和 MySQL。

【问题讨论】:

  • 也许你的意思是const {googleId} = req 或者const googleId = req.googleId

标签: mysql node.js passport.js


【解决方案1】:

看起来我很傻!

感谢大家回答这个问题,但看起来在我的 passport.js 中,我正在对所有内容进行身份验证,而我本应使用我的 ORM 时却使用了我的 API。

【讨论】:

    【解决方案2】:

    是的,尝试在获取操作之前和之后记录“res”。我认为您将使用 promise.then() 块来解决。 Promise 将确保您在 fetch 操作后拥有该值。然后您将能够读取您的“user.googleId”值。

    const promise = new Promise( (req, res) => {
        const user = res.json(await fetchUserByIdFromDb(req))
    });
    promise.then( (val) => res.send(user.googleId);
    

    尝试实现(比我在我的示例中所做的更好)这种类型的谷歌,或者只是谷歌它并尝试找到与你的类似的示例。

    【讨论】:

    • 我在 fetch 操作前后记录了“res”,两次都没有定义。
    猜你喜欢
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2016-02-18
    • 2017-11-04
    • 2015-09-20
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多