如何在fetch()中获得返回的字符串值



下面的代码是我的fetch方法在我单独的register.js。这是我新创建的js文件,因此我可以创建我的前端。目前,我只是试图console.log这个fetch的最终结果,但不能得到输出,因为当我试图POST这个时,我得到了一个错误。

浏览器控制台错误:"未捕获(在承诺中)SyntaxError: JSON中位置0的意外token S ">

fetch(`${rootUrl}api/users/register`,{
method:"POST",
headers:{
"Content-Type": "application/json"
},
body:JSON.stringify({

firstName: firstName,
lastName: lastName,
mobileNo: mobileNo,
email: email,
password: password
})
})
.then(result=>result.json())
.then(result =>{
console.log(result);

})

在userRouter.js中,这是我在上面的register.js中获取的路由:

router.post('/register', (req, res)=>{
userController.register(req.body).then(result => res.send(result))})

路由指向Usercontroller.js中的控制器:

module.exports.register = (reqBody)=>{
//check if email already exists before registering new user
return User.find({email: reqBody.email}).then((result, error) =>{
if(result.length != 0){
return "EMAIL EXISTS!";
}else{
let newUser = new User({
firstName: reqBody.firstName,
lastName: reqBody.lastName,
email:reqBody.email,
password: bcrypt.hashSync(reqBody.password, 10),
mobileNo: reqBody.mobileNo
})
return newUser.save().then((result, error)=>{
if (error){
return error;
}else{
return "SUCCESFULLY REGISTERED NEW USER";
}
})

}
})}
如您所见,这是一个注册表格。后端一切正常,使用postman输入值。我所有的条件提示都被返回(电子邮件存在,注册成功)。

但是当我尝试为它创建一个前端时,我无法得到我定义的提示符。比如,当我故意输入一个重复的电子邮件时,我无法收到"电子邮件存在"的信息。我过去只使用邮差或后端API功能时得到的。

我觉得我正在努力做的事情是非常错误的。我在为我的API创建一个我目前不使用的前端时遇到了麻烦。

您正在返回一个非JSON响应,因此您不能使用res.json()。你只是发送一个文本回复。所以使用res.text()

fetch('/your-endpoint').then((res)=>{
return res.text();
}).then((text)=>{
console.log(text)
})

有一些提示需要指出。

  • 检查rootUrl,因为之后没有foreslash

  • 你正在发送回文本样式。使用这个代替结果json格式。

    res.status(200).json({result})

  • 尽量不要使用同步功能在背面。你应该远离它,或者更确切地说,混合使用bcrypt.hash()Async Function去除CallBack Function,直到它得到完成了。更重要的是,以便检查前一个函数的错误到在正面使用Fetch / Axios.使用Try/Catch方法。

  • 如果我在,我会使用axios [axios.request({})|axios.post(..)]你的鞋。

我有一个类似的问题,但我只需要使用GET方法,而不是张贴。对于正在寻找异步等待解决方案的人:

const response = await fetch("www.google.de");
const text = await response.text();
console.log(text);

相关内容

  • 没有找到相关文章

最新更新