如何获取 fetch() 返回的字符串值

qui*_*ala 4 javascript fetch node.js express postman

下面的代码是我单独的 register.js 中的 fetch 方法。这是我新创建的 js 文件,因此我可以创建我的前端。目前,我只是尝试 console.log 这次提取的最终结果,但无法获得输出,因为当我尝试发布此内容时收到错误。

浏览器控制台中出现错误:“未捕获(承诺中)SyntaxError:JSON 中位置 0 处出现意外的标记 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);
    

    })
Run Code Online (Sandbox Code Playgroud)

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

router.post('/register', (req, res)=>{

userController.register(req.body).then(result => res.send(result))})
Run Code Online (Sandbox Code Playgroud)

并且该路由通向 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";
                }
            })

            
        }
    })}
Run Code Online (Sandbox Code Playgroud)

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

但是当我尝试为它创建一个前端时,我无法得到我定义的提示。就像当我故意输入重复的电子邮件时,我无法得到我以前仅使用邮递员或仅使用时得到的消息“电子邮件存在”后端API功能。

我觉得我想做的事情有些不对劲。我在为我的 API 创建前端时遇到问题,目前我还没有使用它。

har*_*iom 7

您正在返回非 JSON 响应,因此无法使用 res.json()。您只需发送文本回复。所以使用 res.text()

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