【发布时间】:2020-12-18 19:39:46
【问题描述】:
我的前端在 React Native 中完成,后端在 nodejs 中完成。它是一个应用程序,要求用户注册(电子邮件、密码、姓名、电子邮件……),然后使用 mongoose 将数据发送到数据库(mongodb)。
在我的前端;当用户按下按钮注册时,它会调用一个函数名称“提交”,您可以在下面找到:
const Submit = async (fname, email, pwd, confpwd) => {
if (String(pwd).localeCompare(String(confpwd)) == 0) {
let result = await fetch('http://127.0.0.1:2000/api/user/register', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(
{
name: fname.fname,
email: email.email,
password: pwd.pwd
}
)
})
console.log("RESULT : " + JSON.stringify(result))
} else{
console.log('NOT SAME PASSWORD')
}
};
它只接收用户输入的名字、电子邮件和密码,并使用 fetch 将其发布到 API。一切正常,除了最后一行:console.log("这是结果:" + JSON.stringify(result))。它总是返回一个空的 json。
我后端的注册路径如下:
//REGISTER
router.post('/register', async (req, res) => {
//Check the input of the user before we make a user
const {error} = registerValidation(req.body)
if (error) {
console.log('Error1')
return 'Error1'
}
console.log('1&')
//Check if the user is already in the database
const emailExist = await User.findOne({email : req.body.email});
if(emailExist) {
console.log('Error2')
return 'Error2'
}
console.log('2&')
//Hash the password
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(req.body.password, salt)
console.log('3&')
//Create a new user
const user = new User({
name: req.body.name,
email: req.body.email,
password: hashedPassword
})
console.log('4&')
//user.save();
try{
const saveUser = await user.save();
res.send(saveUser);
console.log('5&')
}catch(err){
res.send(err)
}
});
在将其保存到数据库之前,它会检查验证以及电子邮件是否已存在于数据库中。
当满足前两个条件时,它成功将数据发送到数据库,如果电子邮件已被使用且验证格式不正确,则不会将其放入数据库中。
但是,当验证格式不正确或电子邮件已被使用时,我希望前端的 fetch 通知我。所以我认为将我的 fetch 放入一个变量中,如果它不起作用,它会输出一些东西。但是,即使 fetch 不起作用,它也总是会发回一个空的 json。那么,如何将变量从后端传递到前端?
通常在邮递员中,这是我在电子邮件已经存在时收到的内容。我怎样才能在我的前端收到这个?
【问题讨论】:
标签: javascript node.js reactjs react-native fetch