#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 Как выглядит эта форма?