设置授权:JSON 数据的第 1 行第 1 列出现意外字符

Posted

技术标签:

【中文标题】设置授权:JSON 数据的第 1 行第 1 列出现意外字符【英文标题】:Setting up authorization: unexpected character at line 1 column 1 of the JSON data 【发布时间】:2022-01-12 06:27:15 【问题描述】:

我尝试使用mongooseexpressbcryptnodejs 为我当前尝试为用户设置登录页面的页面进行授权。不幸的是,当我尝试输入名称和密码时,我收到以下错误消息:

XHRPOSThttp://localhost:3000/api/register [HTTP/1.1 400 错误请求 48ms] Uncaught (in promise) SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data

我的 login.js 代码如下所示:

router.get('/',  async (req, res) => 
    //const articles = await Object.values(ArticlesWeb.articles).filter(all => all.publish ==='True');
    //res.render('futureweb', articles: articles);
    res.render('login')
);

router.post('/api/register', async (req, res) => 
    res.json(status: 'ok')

    if(!username || typeof username !== 'string')
        return res.json(status: 'error', error: 'Invalid username')
    

    if(!password || typeof username !== 'string')
        return res.json(status: 'error', error: 'Invalid password')
    

    if (password.length < 5)
        return res.json(
            status: 'error',
            error: 'Password is too short. Password should at least have 6 characters.'
        )
    

    const password = await bcrypt.hash(password, 10)

    try 
        const response = await User.create(
            username,
            password)
         catch (error) 
            if (error.code === 11000)
                //duplicate key
                return res.json(status: 'error', error: 'Username already in use')
            
            throw error
            console.log(error)
            
        
    
)

login.ejs 文件的代码包括我从 POST 请求中获取 json 数据的部分:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form id="reg-form">
        <input type="text" id="username" placeholder="Username"/>
        <input type="password" id="password" placeholder="Password"/>
        <input type="submit" value="Submit Form"/>
    </form>
    <script>
        const form = document.getElementById('reg-form')
        form.addEventListener('submit', registerUser)

        // 1. Send data as JSON - favored in node.js
        //2 send data as urlencoded - very popular in php
        async function registerUser(event) 
            event.preventDefault()
            const username = document.getElementById('username').value
            const password = document.getElementById('password').value

            const result = await fetch('/api/register', 
                method: 'POST',
                headers: 
                    'Content-Type': 'application/json'
                ,
                body: JSON.parse(JSON.stringify(
                    username, password
                ))
            ).then((res) => res.json())


        
    </script>
</body>
</html>

谁能提示我的代码有什么问题?

【问题讨论】:

【参考方案1】:

你快到了。试试这个,确保不要同时使用 parse 和 stringify。

 const result = await fetch('/api/register', 
            method: 'POST',
            headers: 
                'Content-Type': 'application/json'
            ,
            body: JSON.stringify(
                username, password
            )
        ).then((res) => res.json())
        .then(data => console.log("data is here -> ", data))

【讨论】:

以上是关于设置授权:JSON 数据的第 1 行第 1 列出现意外字符的主要内容,如果未能解决你的问题,请参考以下文章

角/弹簧靴|错误:SyntaxError:“JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符”

SyntaxError:JSON.parse:尝试插入 mysql 时 JSON 数据的第 1 行第 1 列出现意外字符

ReactJS 和 Node.JS [JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符]

解析器错误:SyntaxError:JSON.parse:JSON 数据的第 2 行第 1 列出现意外字符 200 OK

如何修复 Android Studio 中的“使用 JsonReader.setLenient(true) 在第 1 行第 1 列路径 $ 处接受格式错误的 JSON”错误

json.decoder.JSONDecodeError:额外数据:第 2 行第 1 列(字符 190)[重复]