Регистрация при получении запроса POST в Express - PullRequest
0 голосов
/ 08 апреля 2020

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

<html lang="en" dir="ltr">
 <head>
   <meta charset="utf-8">
   <title>Test</title>
 </head>
<body>
  <form class="test" action="http://localhost:8000/example" method="post">
    <input type="submit" name="but" value="Press me">
  </form>
</body>
</html>

Код Express:

const http = require("http");
const app = require("express")();
const path = require('path');
const bodyParser = require("body-parser");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); 

app.use("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});

app.post("/example", (req, res) => {
console.log("pressed");
});

app.listen(8000, ()=>{
console.log("Running at 8000");
});

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Это происходит потому, что app.use () рассматривается как промежуточное ПО для вашего приложения. Для правильной работы вы должны использовать app.get (). Здесь - более подробное объяснение. Другой альтернативой является предоставление вашего html в качестве статического c контента, вы можете увидеть больше о здесь .

Для правильной работы вы должны изменить свой код на:

app.get("/", (req, res) => {
  res.sendFile(__ dirname + "/index.html");
});

Вы также можете изменить свой HTML следующим образом:

<form class="test" action="/example" method="post">

Потому что находится на том же хосте. Вы просто используете полный URL при выполнении действий с другим хостом.

1 голос
/ 08 апреля 2020

Изменить это ...

app.use("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});

на это ...

app.get("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});
...