我的客户端是使用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});
});
获取错误打印到控制台
app.js路由中的服务器console.logs显示req.body的数据正确,用户账号保存成功。res.send没有出现错误,但是客户端得到的是一个未定义的响应。
经过一番敲打,加上一些外援,我找到了一个解决方案。我有两个主要问题。
下面是工作代码。
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代码保持不变