异步函数findOne返回“未定义”

时间:2020-11-05 18:52:09

标签: node.js asynchronous promise async-await

我创建了一个函数,用于根据sub参数检查数据库中是否存在用户。 我希望我的函数给我一个truefalse值。

前端

......
async function exist(sub) {
  const result = await InfoDataService.get(sub)
  alert(result.sub);
 }      
......

控制器

// Find a User with sub
exports.findOne = (req, res) => {
  const sub = req.params.sub;
  

  User.findOne({sub})
  .then(data => {
    res.send(data);
  })
  .catch(err => {
    res.status(500).send({
      message: "Error retrieving User with id=" +sub 
    });
  });
};

路线

module.exports = app => {
  const users = require("../controllers/user.controller.js");

  const router = require("express").Router();


  // Retrieve
  router.get("/:sub", users.findOne);


  app.use('/api/users', router);
};

InfoDataService

import http from "../http-common.js";


const get = sub => {
  return http.get(`/users/${sub}`);
};

export default {
  get,
};

http公用

import axios from "axios";


    export default axios.create({
      method: 'GET',
      baseURL: "http://localhost:8080/api",
      
    });

如果我仅使用result.sub而不是result可以检索对象,但是如果尝试访问.sub属性,则会得到“未定义”。

我注意到另一件事可能与之相关:发布的路径为api/users,而获取的路径为api/users/:sub。 检查网络后,我发现异步功能向api/users/undefined发送了请求。错误在哪里?

1 个答案:

答案 0 :(得分:1)

不确定User.findOne({sub})是否正确,是否应该在其中使用where子句? { where: sub}