Как заставить браузер автоматически менять маршрут к месту назначения?

Я очень отчаянно нуждаюсь в помощи. Я был на этой проблеме в течение нескольких дней и не нашел ответа. В настоящее время я новичок в Node.js, и я думаю, что мне не хватает ключевого аспекта, но я не уверен, что это такое. Я следил за несколькими учебными пособиями по созданию проектов Node.js, но они часто представляют собой только одностраничный HTML-код. Я пытаюсь расширить на несколько страниц. (Я постараюсь предоставить как можно больше информации.)

В настоящее время я пытаюсь создать веб-страницу с формой (index.html), которая запрашивает у пользователей информацию. Когда пользователь нажимает «Отправить», он отправляет запрос на публикацию в базу данных и отправляет статус 200 в случае успеха. Затем браузер должен перейти на другую страницу (makeMatches.html).

Вот моя проблема: Я хочу, чтобы страница перешла с «localhost: 3000» на «localhost: 3000/createEvent» после нажатия кнопки «Отправить», но браузер этого не делает, он остается на той же странице с «localhost: 3000». Но если я вручную наберу «localhost: 3000/createEvent», он сможет загрузить html-файл. Поэтому мне нужна помощь, чтобы моя веб-страница автоматически перемещалась из точки А в точку Б.

Я сделал другие варианты кода, которые включали express.router() и express.engine(), но они не решили мою проблему.

Вот как устроен мой каталог:
проект:
--index.js
--dbqueries.js
--views(папка)
---- index.html
---- makeMatches.html
---- стиль.css
---- app.js

index.js

const express = require('express')
const bodyParser = require('body-parser')
const dbqueries = require('./dbqueries')
const app = express()

app.use(express.static(__dirname + '/views'))
app.use(bodyParser.urlencoded({extended:true}))
app.use(bodyParser.json())

app.get('/', function(req,res){
  res.sendFile(__dirname + '/views/index.html')
})

app.get('/CreateEvent', function(req, res){
  console.info('get /createevent')
  res.sendFile(__dirname + '/views/makeMatches.html')
})

app.post('/CreateEvent', function(req,res){
  //if emtpy return error
  if (!req.body) return res.sendStatus(400)
  //else send event info to db
  console.info('creating event...')
  dbqueries.createEvent({
    time: req.body.time,
    date: req.body.date,
    location: req.body.location,
    message: req.body.message,
    singles: req.body.singles,
    couples: req.body.couples
  })
  .then(() => res.sendStatus(200))
})

//start server
app.listen(3000, ()=> console.info('Server running on port 3000'))

app.js

const createEvent = document.querySelector('.CreateEvent')
createEvent.addEventListener('submit', (e) => {
  console.info('starting in app.js')
  e.preventDefault()
  const time = createEvent.querySelector('.time').value
  const date = createEvent.querySelector('.date').value
  const location = createEvent.querySelector('.location').value
  const message = createEvent.querySelector('.message').value
  const singles = createEvent.querySelector('.singlesValue').value
  const couples = createEvent.querySelector('.couplesValue').value
  console.info(time, date, location, message, singles, couples)
  post('/CreateEvent', {time, date, location, message, singles, couples})
})

function post(path, data){
  return window.fetch(path, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  })
}

Когда я просматриваю страницу и нажимаю кнопку отправки, я вижу элемент с именем CreateEvent, и когда я навожу курсор на него, он говорит «localhost: 3000/CreateEvent», но тип — fetch.

Вы также можете опубликовать код index.html?

IRSHAD 16.04.2019 08:02

Вы пробовали window.location.href = '/CreateEvent; после успешной отправки формы?

Dhaval Chaudhary 16.04.2019 08:58

в вашем app.post для отправки формы вы делаете несколько отличных вещей, но не возвращаете свой res.sendFile(__dirname + '/views/makeMatches.html')

james 16.04.2019 22:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем app.js

 const createEvent = document.querySelector('.CreateEvent')
 createEvent.addEventListener('submit', (e) => {

 e.preventDefault()
 const time = createEvent.querySelector('.time').value
 const date = createEvent.querySelector('.date').value
 const location = createEvent.querySelector('.location').value
 const message = createEvent.querySelector('.message').value
 const singles = createEvent.querySelector('.singlesValue').value
 const couples = createEvent.querySelector('.couplesValue').value
 post('/CreateEvent', {time, date, location, message, singles, couples}).then(()=>{
   window.location.href = '/CreateEvent'; // you were missing redirection on success
 })
})

function post(path, data){
 return window.fetch(path, {
   method: 'POST',
   headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
   },
   body: JSON.stringify(data)
  });
 }

Спасибо! это решило мою проблему! Я думаю, что слишком много думал, что экспресс был ответом, что я даже не думал о стороне клиента.

C.M. 16.04.2019 22:59

Другие вопросы по теме