#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))