У меня есть экспресс-сервер runnnig на порту 8082. После доступа к маршруту "/" в GET он отображает файл index.html, затем я отправляю его форму в "/" как POST, используя скрипт app.js. Этот маршрут имеет промежуточное ПО под названием «validate1», которое проверяет, равен ли заголовок «x-client» «студенту», чтобы управлять этим доступом к маршруту.
Проблема в том, что когда заголовок «x-client» не равен «student», а промежуточное ПО «validate1» заканчивается в «else», я просто не могу вывести или отправить что-либо как ответ. Node.js печатает мое «здесь», но не запускает следующую строку «res.send ()».
На маршруте "/ travel" у меня почти то же самое промежуточное программное обеспечение работает отлично, но там я использую метод GET, а не jquery.
ОБНОВЛЕНИЕ: я выяснил, что мой ответ печатается в консоли браузера из-за моего ".then ()" в функции POST jquery в "app.js", но даже удаляя его, ответ никогда не отображается на странице .
index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge"><!-- rota no css-->
<title>Document</title>
<link rel="stylesheet" href="./style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<form method="POST">
Nome:<input name="nome" type="text" id="nome">
<br>
Sobrenome:<input name="sobrenome" type="text" id="sobrenome">
<button>Send data</button>
</form>
</body>
<script src="./app.js"></script>
</html>
app.js
$("button").on("click", (event) => {
$("button").attr("disabled","disabled")
const nome = $("#nome").val().trim()
const sobrenome = $("#sobrenome").val().trim()
const user = {
nome,
sobrenome
}
$.ajax({
url:"/",
method:"POST",
data:user,
headers:{
"x-client":"student",
"x-class":500
}
}).then((resposta) => {
console.log(resposta)
}).catch((erro) => {
console.log("Error:" + erro)
})
})
routing.js
const express = require("express")
const path = require("path")entre windows e mac
const router = express.Router()
router.get("/",(req,res) => {
res.sendFile(path.join(__dirname,"../views/index.html"))
})
//not working route
const validate1 = (req,res,next) => {
const access = req.headers["x-client"]
if(access === "student2"){
next()
}
else{
console.log("here")//it runs!
res.send("You don't have access to it!")//it doesn't run!
}
}
router.post("/", validate1 ,(req,res) => {
const user = {
nome:req.body.nome,
sobrenome: req.body.sobrenome
}
res.json(user)
})
//working route
const validate2 = (req,res,next) => {
const access = false
if(access){
next()
}
else{
res.send("You don't have access to it!")
}
}
router.get("/travel",validate2,(req,res) => {
res.send("Travel!")
})
На самом деле я не получаю никакой ошибки, но вместо получения сообщения мне полагали, что моя кнопка формы просто отключается и ничего не происходит.
Заранее спасибо.