#javascript #html #node.js
#javascript #HTML #node.js
Вопрос:
Я создаю простую форму входа, которая (на данный момент) будет регистрировать вас, пока имя пользователя и пароль проходят функцию проверки на стороне клиента. Форма показана здесь ниже (немного перефразирована).
...
<form id="logonForm">
<input id="email">
<input id="password">
<button type="submit">Logon</button>
</form>
...
Следует отметить, что эта форма загружается по адресу /login route (там должен быть настроен маршрут ПОЛУЧЕНИЯ). При загрузке страницы этой форме назначается функция onsubmit, как показано ниже.
...
document.getElementById("logonForm").onsubmit = loginUser;
В качестве примечания LoginUser является импортированной функцией из другого файла. Было проверено, что эта функция работает, хотя я могу выполнить ее пошагово при отправке формы. Эта функция выполняет множество функций, но основные важные части изображены ниже.
...
method = {
method: "POST",
body: loginDetails
};
fetch(url, method)
.then(result => result.json())
.then(result => sessionStorage.setItem("userToken", result[0].userToken))
.catch(error => alert(err.message))
Эта выборка запрашивает маршрут отправки, также расположенный на маршруте /login, с именем пользователя и паролем, отправленными в кодировке FormData (). Когда я запускаю эту функцию, выборка (или до / после выборки) не выдает ошибку, но результат возвращает empty / null.
Исследуя это из моего серверного кода, я обнаружил, что маршрут «POST», похоже, не выполняется, даже когда отправлена выборка. В этом следующем коде «Это» никогда не регистрируется на консоли, но «Это» регистрируется.
exports.logonUser = (app, formidable, fs, jwt) => {
console.log("This");
app.post('/login', (request, result, next) => {
console.log("That");
...
}
}
Эта функция вызывается в моем server.js файл, который запускается для запуска сервера, как показано ниже.
const home = require('./api/routes/home.js');
const login = require('./api/routes/login.js');
app.use(express.static(path.join(__dirname, process.env.STATIC || 'public/')));
login.openRoute(app, path);
login.logonUser(app, formidable, fs, jwt);
app.use((request, result, next) => {
// This is "true" until I have tokens properly working
if (true) result.redirect('/login');
else next();
});
home.openRoute(app, path);
app.get('/', (request, result) => result.redirect('/home'));
app.listen(process.env.PORT || 3000, () => console.log("[SUCCESS][SERVER] Server is listening on port 3000"));
Я попытался немного изменить порядок функций, но, похоже, это тот порядок, который обеспечивает функциональность по назначению (кроме того, что логин не работает). Я также попытался удалить часть, которая автоматически перенаправляет пользователей в / login на случай, если там происходило что-то необычное, но и в этом отношении безуспешно. Я предполагаю, что есть что-то в моем server.js однако код, который приводит к тому, что маршрут отправки при входе в систему не выполняется. Есть ли что-нибудь, что вы можете видеть, что может вызвать такое поведение? Спасибо за любую помощь.
Комментарии:
1. может быть, это просто ваша «очистка» для совместного использования кода здесь, но не лишним будет упомянуть, что у вас есть
comsole.log("That");
с M , на всякий случай.2. Извините, я ввел ошибку при написании кода здесь, я сейчас это отредактирую. Хотя в моем исходном коде это всегда было
console.log("That");
.3. является ли ваша выборка той, из developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch ? И в таком случае, действительно ли ваш метод является объектом, который инкапсулирует
method: 'POST'
?4. Если я правильно понял, ваше app.post работает неправильно? для этого попробуйте добавить это в HTML-код <form action=»/your_route» method=»post»>
5. Изначально я использовал
<form action="/login" method="POST">
, но я не мог понять, как я мог бы это сделать, а затем получить JWT обратно в том же действии (если вы знаете какой-либо способ сделать это, не могли бы вы связать меня с тем, где это объясняется)? Да, метод определен как somethod = { method: POST, body: loginDetails }
, я добавлю это к вопросу сейчас.