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

pdtvr36n  于 2023-04-30  发布在  Postman
关注(0)|答案(3)|浏览(349)

下面的代码是我在单独的寄存器中的fetch方法。js.这是我新创建的js文件,所以我可以创建我的前端。现在我只是想安慰你。记录这个fetch的结束结果,但是不能得到输出,因为当我尝试POST这个时,我得到了一个错误。
浏览器控制台出错:“Uncaught(in promise)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,这是我在寄存器中获取的路由。上面的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输入值。我的所有条件提示都被返回(电子邮件存在,成功注册)。
但是当我尝试为它创建一个前端时,我无法获得我定义的提示符。就像当我故意输入一封重复的电子邮件时,我无法得到“Email exists”的消息,而我以前只使用 Postman 或只使用后端API功能时得到的消息。
我觉得我做的事情有问题。我在为我的API创建一个前端时遇到了问题,我现在还没有使用它。

w8f9ii69

w8f9ii691#

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

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

iyfjxgzm2#

有一些提示需要指出。

  • 检查rootUrl,因为之后没有foreslash
    您正在发回文本样式。使用这个代替得到json的结果。
    res.status(200).json({result})
    尽量不要在背面使用同步功能。你应该给予它一个更远的距离,或者更确切地说,使用bcrypt.hash()Async Function混合来删除CallBack Function,直到它完成。更重要的是,以便检查前一个函数的错误,得到它的正面使用
    Fetch / Axios.使用Try/Catch**方法。
  • 我会使用axios [ axios.request({})|如果我是你的话。
bweufnob

bweufnob3#

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

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

相关问题