Почему мой текст не отображается после запроса post — MongoDB

#javascript #node.js #mongodb #express #mongoose

#javascript #node.js #mongodb #выразить #мангуст

Вопрос:

В настоящее время я создаю базовый клон Twitter. Все прошло идеально, прежде чем мой текст начал не отображаться, когда я сделал запрос post. В чем может быть проблема? Мой код:

app.js:

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

var app = express();

mongoose.connect("mongodb://localhost:27017/twitter_clone", {
    useNewUrlParser: true,
    useUnifiedTopology: true
})
.then(() => console.log("CONNECTED TO DB"))
.catch((error) => console.log(error.message));

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname   '/public'));
app.set("view engine", "ejs");

// MONGODB TWEETS SCHEMA

var tweetsSchema =  new mongoose.Schema({
    text: String
})
var Tweets = mongoose.model("Tweets", tweetsSchema);

//================
//RESTFUL ROUTES
//================

// INDEX ROUTES

app.get("/", function(req, res){
    Tweets.find({}, function(err, allTweets){
        if(err){
            console.log(err);
        } else {
            res.render("home", {newtweet:allTweets});
        }
    })
})
app.get("/explore", function(req, res){
    res.render("explore");
})
app.get("/notifications", function(req, res){
    res.render("notifications");
})
app.get("/messages", function(req, res){
    res.render("messages");
})
app.get("/bookmarks", function(req, res){
    res.render("bookmarks");
})
app.get("/lists", function(req, res){
    res.render("lists");
})
app.get("/profile", function(req, res){
    res.render("profile");
})
app.get("/more", function(req, res){
    res.render("more");
})

// NEW ROUTES

app.get("/tweet/new", function(req, res){
    res.render("new");
})


// POST

app.post("/posttweet", function(req, res){
    var text = req.body.text;
    var newtweet = {text: text};
    Tweets.create(newtweet, function(err, newTweet){
        if(err){
            console.log(err)
        } else {
            res.redirect("/");
        }
    })
})
//DELETE
app.get("/delete/:id", function(req,res){
    mongoose.model("Tweets").remove({_id:req.params.id}, function(err, delData){
        res.redirect("/");
    })
})
app.listen(5000, function(){
    console.log("Server listening on port 5000");
})
  

home.ejs:

 <form action="/tweet/new">
    <input class="bluebutton" type="submit" value="Tweet" />
</form>
<div class="tweets">
    <% newtweet.forEach(function(newtweet){ %>
        <div class="showtweets">
            <p class="tweetcontent">
                <%= newtweet.text %>
            </p>
        </div>
    <% }) %>
</div>
  

Я задавал аналогичный вопрос раньше, и я нашел решение, и оно некоторое время работало хорошо, но я внес некоторые изменения, и теперь оно не работает нормально.

Комментарии:

1. Где в home.ejs вы делаете запрос post? Форма отправляет запрос в /tweet/new с помощью метода GET .

2. Он работает так же, как href=»/ tweet /new», просто ссылка на страницу формы

Ответ №1:

Создайте форму, которая отправляет post-запрос в «/ posttweet»:

 <form action="/posttweet" method="post">
  <input type="text" name="text" />
  <input type="submit" value="Tweet" />
</form>
  

Это должно сделать правильный запрос к вашему единственному почтовому маршруту.

Совет по редактированию: обязательно отправьте какой-нибудь ответ от ваших обработчиков, даже если это ошибка, иначе ваш сервер просто зависнет.

Комментарии:

1. Я уже создал форму, и она возвращает только идентификатор

2. @MrHulky Как выглядит эта форма?