Я очень отчаянно нуждаюсь в помощи. Я был на этой проблеме в течение нескольких дней и не нашел ответа. В настоящее время я новичок в 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.
Вы пробовали window.location.href = '/CreateEvent; после успешной отправки формы?
в вашем app.post для отправки формы вы делаете несколько отличных вещей, но не возвращаете свой res.sendFile(__dirname + '/views/makeMatches.html')





В вашем 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)
});
}
Спасибо! это решило мою проблему! Я думаю, что слишком много думал, что экспресс был ответом, что я даже не думал о стороне клиента.
Вы также можете опубликовать код index.html?