【问题标题】:How can I get returned string values in fetch()如何在 fetch() 中获取返回的字符串值
【发布时间】:2021-11-04 21:30:54
【问题描述】:

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

浏览器控制台中的错误: “未捕获(承诺中)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);
    

    })

在 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";
                }
            })

            
        }
    })}

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

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

我觉得我正在尝试做的事情很不对劲。我在为我的 API 创建前端时遇到了问题,我目前没有使用它。

【问题讨论】:

  • 你没有回复JSON ...使用result.text()而不是result.json()
  • 哦,这是一个多么简单的解决方案。起初我认为这与承诺有关。谢谢

标签: javascript node.js express fetch postman


【解决方案1】:

有一些提示需要指出。

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

  • 您正在发回文本样式。使用它来获得json 格式的结果。

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

  • 尽量不要在背面使用同步功能。你 应该给它一个广泛的铺位,或者更确切地说,使用bcrypt.hash()混合 用Async Function 删除CallBack Function 直到它得到 完毕。更重要的是,为了检查前一个函数的错误 使用 Fetch / Axios. 在前端获取它,使用 Try/Catch 方法。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2014-05-27
      • 2021-09-13
      • 2018-06-17
      相关资源
      最近更新 更多