如何在 fetch() 中获取返回的字符串值
How can I get returned string values in fetch()
下面的代码是我单独 register.js 中的获取方法。这是我新创建的 js 文件,所以我可以创建我的前端。目前我只是试图 console.log 此获取的最终结果,但无法获得输出,因为当我尝试 POST this.
浏览器控制台错误:
“未捕获(承诺)语法错误:位置 0 JSON 中的意外标记 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";
}
})
}
})}
如您所见,这是一张注册表。后端一切正常,使用邮递员输入值。我所有的状态提示都在返回中(邮箱存在,注册成功)。
但是当我尝试为它创建一个前端时,我无法得到我定义的 prompts.Like 当我故意输入重复的电子邮件时,我无法得到我以前的消息“电子邮件存在”仅使用邮递员或仅使用后端 API 功能时获取。
我觉得我正在尝试做的事情有很大的问题。我在为我的 API 创建前端时遇到问题,我目前没有使用它。
有一些提示需要指出。
检查 rootUrl
因为在那之后没有 foreslash
.
您正在发回文本样式。使用它来获得结果 json
格式。
res.status(200).json({result})
尽量不要在背面使用同步功能。你
应该敬而远之,或者更确切地说,使用 bcrypt.hash()
混合
用 Async Function
删除 CallBack Function
直到它得到
完毕。更重要的是,为了检查前一个函数的错误
使用 Fetch / Axios.
在正面获取它,使用 Try/Catch
方法。
我会使用 axios [ axios.request({})
| axios.post(..)
] 如果我在
你的鞋子。
您正在返回非 JSON 响应,因此您不能使用 res.json()。您只是发送文本回复。所以使用 res.text()
fetch('/your-endpoint').then((res)=>{
return res.text();
}).then((text)=>{
console.log(text)
})
下面的代码是我单独 register.js 中的获取方法。这是我新创建的 js 文件,所以我可以创建我的前端。目前我只是试图 console.log 此获取的最终结果,但无法获得输出,因为当我尝试 POST this.
浏览器控制台错误: “未捕获(承诺)语法错误:位置 0 JSON 中的意外标记 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";
}
})
}
})}
如您所见,这是一张注册表。后端一切正常,使用邮递员输入值。我所有的状态提示都在返回中(邮箱存在,注册成功)。
但是当我尝试为它创建一个前端时,我无法得到我定义的 prompts.Like 当我故意输入重复的电子邮件时,我无法得到我以前的消息“电子邮件存在”仅使用邮递员或仅使用后端 API 功能时获取。
我觉得我正在尝试做的事情有很大的问题。我在为我的 API 创建前端时遇到问题,我目前没有使用它。
有一些提示需要指出。
检查
rootUrl
因为在那之后没有foreslash
.您正在发回文本样式。使用它来获得结果
json
格式。res.status(200).json({result})
尽量不要在背面使用同步功能。你 应该敬而远之,或者更确切地说,使用
bcrypt.hash()
混合 用Async Function
删除CallBack Function
直到它得到 完毕。更重要的是,为了检查前一个函数的错误 使用Fetch / Axios.
在正面获取它,使用Try/Catch
方法。我会使用 axios [
axios.request({})
|axios.post(..)
] 如果我在 你的鞋子。
您正在返回非 JSON 响应,因此您不能使用 res.json()。您只是发送文本回复。所以使用 res.text()
fetch('/your-endpoint').then((res)=>{
return res.text();
}).then((text)=>{
console.log(text)
})