为什么我的api发布请求(Vue.js客户端)从我的快递服务器收到一个未定义的响应?

问题描述 投票:0回答:1

我的客户端是使用Vuex商店的Vue.js。我在服务器端使用 passport.js 进行认证。登录和账户注册都可以使用。检查mongodb显示有新数据。但是express向客户端发送了一个未定义的响应。这是我的第一个大型javascript项目,所以我希望是一些简单的问题,只是我的眼睛还看不到。

客户端:api.js

export async function registerUser(user) {
  console.log("api to register user");
  console.log(user);
  const route = `${api}/register`;
  return fetch(route, {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify(user)
  })
    .then(response => {
      console.log(response.json());
      return response.json();
    })
    .then(json => {
      console.log(json);
      return json;
    })
    .catch(err => {
      console.error(err);
    });
}

客户端:index.js (vuex store,其中res未定义)

actions: {
async register(state, user) {
      apis.registerUser(user).then(res => {
        if (res.success) {
          this.dispatch("loadUser");
          alert("successfully registered");
        }
      });
    },
    async loadUser() {
      apis.getUser().then(res => {
        this.commit("setUser", res.user);
      });
    }
}

服务器:app.js

app.post('/api/v1/register', function(req, res) { 
  const success = true;
  Users=new User({email: req.body.email, username : req.body.username}); 
  console.log(req.body);
  User.register(Users, req.body.password, function(err, user) { 
    if (err) { 
      console.log('account could not be saved');
      success = false;
    } else { 
      console.log('account saved');
    }
  })
  res.send({success: success});
});

获取错误打印到控制台

enter image description here

app.js路由中的服务器console.logs显示req.body的数据正确,用户账号保存成功。res.send没有出现错误,但是客户端得到的是一个未定义的响应。

javascript node.js express post fetch
1个回答
0
投票

经过一番敲打,加上一些外援,我找到了一个解决方案。我有两个主要问题。

  1. 我没有防止提交按钮上的默认值,所以在请求被正确处理之前,表单就被刷新了。
  2. javascript承诺处理不当。

下面是工作代码。

api. js

export function registerUser(user) {
  console.log("api to register user");
  console.log(user);
  const route = `${api}/register`;
  return fetch(route, {
    method: "POST",
    headers: {
      "Content-Type": "application/json"
    },
    body: JSON.stringify(user)
  })
    .then(response => {
      console.log(response.json());
      return response.json();
    })
}

index.js (vuex store)

actions: {
register(state, user) {
      apis.registerUser(user).then(res => {
        if (res.success) {
          alert("successfully registered");
        }
      }).catch(err => {
          console.error(err);
      });
    }
}

app.js代码保持不变

© www.soinside.com 2019 - 2024. All rights reserved.