Настройка авторизации: неожиданный символ в строке 1 столбца 1 данных JSON

#javascript #node.js #json #mongoose

#язык JavaScript #node.js #json #мангуст

Вопрос:

Я пытаюсь выполнить авторизацию для своей страницы, на которой в данный момент пытаюсь настроить страницу входа для пользователя, используя mongoose , express , bcrypt и nodejs . К сожалению, когда я пытаюсь ввести имя и пароль, я получаю следующее сообщение об ошибке:

XHRPOSThttp://локальный хост:3000/api/регистр [HTTP/1.1 400 Неверный запрос 48 мс] Неперехваченная (в обещании) Синтаксическая ошибка: JSON.синтаксический анализ: неожиданный символ в строке 1, столбец 1 данных JSON

Мой код для login.js выглядит следующим образом:

 router.get('/', async (req, res) =gt; {  //const articles = await Object.values(ArticlesWeb.articles).filter(all =gt; all.publish ==='True');  //res.render('futureweb', {articles: articles});  res.render('login') });  router.post('/api/register', async (req, res) =gt; {  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 lt; 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 включает в себя часть, в которой я получаю данные json из своего запроса POST:

 lt;html lang="en"gt; lt;headgt;  lt;meta charset="UTF-8"gt;  lt;meta http-equiv="X-UA-Compatible" content="IE=edge"gt;  lt;meta name="viewport" content="width=device-width, initial-scale=1.0"gt;  lt;titlegt;Documentlt;/titlegt; lt;/headgt; lt;bodygt;  lt;form id="reg-form"gt;  lt;input type="text" id="username" placeholder="Username"/gt;  lt;input type="password" id="password" placeholder="Password"/gt;  lt;input type="submit" value="Submit Form"/gt;  lt;/formgt;  lt;scriptgt;  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) =gt; res.json())    }  lt;/scriptgt; lt;/bodygt; lt;/htmlgt;  

Может ли кто-нибудь намекнуть мне, что не так с моим кодом?

Ответ №1:

Твои почти рядом. попробуйте это, убедитесь, что вы не используете синтаксический анализ и строку одновременно.

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