MongoDB нигде не сохраняет данные

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

#javascript #node.js #mongodb #экспресс #мангуст

Вопрос:

Я новичок в nodejs, mongoose, express и пытаюсь создать базовый клон Twitter. Когда я хочу создать новый твит и нажимаю кнопку отправки, ничего не происходит. Вот мой код:


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;
    var newtweet = {textmessage: text};
    Tweets.create(newtweet, function(err, newTweet){
        if(err){
            console.log(err)
        } else {
            res.redirect("/");
        }
    })
})






app.listen(5000, function(){
    console.log("Server listening on port 5000");
})
  

home.ejs:


   <div class="middlewelcome">
            <h3>Welcome to twitter!</h3>
            <p id="welcomingp">This is the best place to see what’s happening in your world. Find some people and topics <br> to follow now.</p>
            <button id="getstarted" class="bluebutton">Get Started</button>
        </div>
        <div class="tweets">
            <% newtweet.forEach(function(newtweet){ %>
            <div class="showtweets">
                <h1>
                    <%= newtweet.text %>
                </h1>
            </div>
            <% }) %>
        </div>
    </div>
  

Ранее я пытался вручную сохранить новый текст, и он работает нормально, поэтому я не знаю, в чем проблема и почему мой почтовый маршрут не работает

Ответ №1:

В tweetsSchema текстовом поле указано имя text , но в вашем почтовом маршруте вы его вызываете textmessage . Попробуйте переименовать значение в маршруте POST, чтобы оно соответствовало схеме.

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

1. Теперь это почти работает. Я получаю сообщение об ошибке: { CastError: приведение к строке не удалось для значения «{ text: ‘sgdrsdgr’ }» в пути «текст»

2. req.body является объектом. Назначить текст req.body.text .

Ответ №2:

 app.post("/posttweet", function(req, res){
    var text = req.body;
    var newtweet = {text: text}; // typo error
    Tweets.create(newtweet, function(err, newTweet){
        if(err){
            console.log(err)
        } else {
            res.redirect("/");
        }
    })
})
  

схема, которую вы определили, и объект, который вы передаете, не совпадают