【问题标题】:MERN router.get request returning undefinedMERN router.get 请求返回未定义
【发布时间】:2020-07-07 03:35:49
【问题描述】:

所以,我正在尝试使用获取请求来查找用户的电子邮件并在屏幕上显示信息。为此,我使用用户的电子邮件设置了一个本地存储项,并尝试在我的 api 调用中引用它。但是,在后端方面,当我尝试通过 axios 调用发送电子邮件时,它并没有到达后端,我可以用它做任何事情。我收到了一个状态码 500 错误以及这个 TypeError: Cannot read property 'then' of undefined

这是我的 router.get 函数,它抛出了错误

router.get("/user", function(req, res) {
  console.log("id hit");
  console.log(req.data);
  console.log(req.params.email);
  db.User
      .getUserByEmail(req.params.email)
      .then((dbModel) => res.json(dbModel))
      .catch((err) => res.status(422).json(err));
});

这是我的 getUserByEmail 函数

module.exports.getUserByEmail = function (email, callback) {
  console.log("getUserByEmail", email)
  var query = { email: email };
  console.log(query);
  User.findOne(query, callback);
};

这是我的前端 API axios 调用

getUser: function(email) {
    console.log("API EMAIL: ",email);
    return axios.get("/api/users/user/", email);
  }

这是我要显示信息的页面上的 componentDidMount

 componentDidMount() {
        const userEmail = localStorage.getItem("userEmail");
        this.setState({
            email: userEmail
        }, () => {
            console.log(this.state.email);
            API.getUser(this.state.email)
            .then(data => {
                this.setState({
                    firstName: data.firstName,
                    lastName: data.lastName,
                })
            })
        })
    }

我可以在前端引用电子邮件,但是一旦它到达后端,一切都未定义。任何帮助表示赞赏。

【问题讨论】:

    标签: javascript node.js routes axios mern


    【解决方案1】:
    module.exports.getUserByEmail = function (email, callback) {
      console.log("getUserByEmail", email)
      var query = { email: email };
      console.log(query);
      User.findOne(query, callback);
    };
    

    这个函数不返回任何东西 你需要从中返回一些东西。

    你可以的

    return user.findOne(query, callback);
    

    只要 user.findOne 返回一些东西,如果它的 mongoose 或 mongo 它可能是一个承诺。

    你还需要路线

    router.get("/user/:email", function(req, res)
    

    【讨论】:

    • 我没有再收到任何错误,但一切仍未定义。感谢您抽出宝贵时间回答。
    • 您在记录电子邮件时 console.log 会显示什么
    • 我刚刚添加了一些我注意到的东西。您的路线没有路线参数,它需要像上面一样
    • 解决了,谢谢!我做了你所说的更改,另外我将我的 axios 调用切换到 return axios.get("/api/users/user/" + email) 并且一切正常。
    猜你喜欢
    • 2018-08-09
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多