Маршрут экспресс-почты не открывается при выполнении действия

#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 обратно в том же действии (если вы знаете какой-либо способ сделать это, не могли бы вы связать меня с тем, где это объясняется)? Да, метод определен как so method = { method: POST, body: loginDetails } , я добавлю это к вопросу сейчас.