NodeJS и MongoDB "Cannot POST /" - PullRequest
       3

NodeJS и MongoDB "Cannot POST /"

0 голосов
/ 02 апреля 2020

Я использовал mongoDB с mon goose ODM, и я не могу понять это. Я следил за учебником онлайн, но когда я тестирую свой код, он перенаправляется на пустую страницу с надписью «Cannot POST /»

Вот мой код:

server. js

var mongoose = require("mongoose");
var bodyParser = require("body-parser");
var express = require("express");
var app = express();


var PORT = 3332;

app.use("/", express.static(__dirname));

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


mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost/gamedata", {
    useNewUrlParser: true
});


var gameSchema = new mongoose.Schema({
    nickname: String
});

var User = mongoose.model("User", gameSchema);


app.post("/addname", (req, res) =>{

    var playerNickname = new User(req.body);
    playerNickname.save()
    .then(item => {

        console.log("nickname created")
        res.send("item saved to database");


    })
    .catch(err => {

        res.status(400).send("unable to save to database");
        console.log("error baby!");

    });
});

app.listen(PORT, function () {
    console.log("server is up and running using port " + PORT)
});

index. html

<html>
<link href="https://fonts.googleapis.com/css?family=Press+Start+2P&display=swap" rel="stylesheet">

<body>
<h1 class="center-align">Create Nickname</h1>
    <form method="post" name="/addname">
        <input id="pickName" type='text' name='pickName' placeholder='Nickname' required>
        <input id='ready' value=" Ready >" type='submit'>
    </form>

</body>
<script>
</script>

</html>

Что, кажется, исправляет это, когда я меняю

app.use("/", express.static(__dirname));

на следующий код:

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

Но в моем конкретном c случае я не могу этого сделать.

Кто-нибудь знает об обходном пути?

1 Ответ

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

Вы должны изменить свой индекс. html

Вместо использования:

 <form method="post" name="/addname">

вы должны использовать:

<form method="post" action="/addname">

Это должно решить вашу проблему.


Атрибут действия

Атрибут действия определяет действие, которое будет выполняться при отправке формы.

Обычно данные формы отправляется на страницу на сервере, когда пользователь нажимает кнопку отправки.

В приведенном выше примере данные формы отправляются на страницу на сервере с именем "/ addname". Эта страница содержит скрипт, который обрабатывает данные формы:

Если атрибут action опущен, действие устанавливается на текущую страницу.

Атрибут «name» используется в полях ввода, а не в теге. Я только нашел некоторую информацию здесь. https://www.w3schools.com/html/html_forms.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...