У меня проблема, когда когда я нажимаю кнопку «Отправить» в форме PUT, она просто сбрасывает страницу и никогда не попадает в маршрут.
Я немного озадачен этой проблемой, с которой я столкнулся, и это должно быть я новичок ie, поскольку у меня все еще есть способы go в моем обучении.
Я использую NodeJS, Express / Method Override для работы с приложением для управления вводом времени, которое я создаю.
Я пытаюсь добавить страницу профиля, которая позволяет редактировать информацию для пользователя.
Вот маршруты GET / PUT:
// Profile Page
router.get("/profile/:user", middleware.isLoggedIn, (req, res) => {
if(req.params.user !== req.user.username) {
return res.redirect("/home")
} else {
User.findOne({username: req.params.user}, (err, user) => {
if(err) {
req.flash("error", "Something went wrong...")
res.redirect("/home")
} else {
res.render("profile", {user: user})
}
})
}
})
// Update User
router.put("/profile/:user"), middleware.isLoggedIn, (req, res) => {
console.log("I Made it here")
User.findByIdAndUpdate({"_id": req.user._id}, req.body.User, (err, updatedUser) => {
if(!err) {
res.redirect("/home")
} else {
console.log("Sucky Mucky")
res.redirect("/home")
}
} )
}
Вот E JS Маршрут:
<% include partials/header %>
<section class="jumbotron text-center jumboheight">
<div class="container">
<div class="row">
<div class="col-sm" id="rcorners">
<h1>Profile Page</h1>
<hr>
<p class="lead text-muted">User information</p>
<div class="row">
<div class="col-md-4">
<p>First Name: </p>
<p>Last Name: </p>
<p>Date of Birth: </p>
<p>E-mail: </p>
<p>Username: </p>
</div>
<div class="col-md-4">
<form action="<%= user.username %>?_method=PUT" method="POST">
<input class="form-control" type="text" name="User[firstName]" value="<%= user.firstName %>" required>
<input class="form-control" type="text" name="User[lastName]" value="<%= user.lastName %>" required>
<input class="form-control" type="date" name="User[dob]" value="<%= user.dob %>" required>
<input class="form-control" type="email" name="User[email]" value="<%= user.email %>" required>
<input class="form-control" type="text" name="User[username]" value="<%= user.username %>" disabled>
<button class="btn btn-secondary my-2 fwaaccentcolor">Update</button>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<% include partials/footer %>
Когда я нажимаю "Отправить", все, что происходит, что экран обновляется. Я проверяю вкладку сети на chrome, и она показывает мне следующее:
Request URL: http://localhost:5213/home/profile/jvillegas?_method=PUT
Request Method: POST
Status Code: 302 Found
Remote Address: [::1]:5213
Referrer Policy: no-referrer-when-downgrade
Connection: keep-alive
Content-Length: 132
Content-Type: text/html; charset=utf-8
Date: Wed, 06 May 2020 19:21:58 GMT
Location: http://localhost:5213/home/profile/jvillegas
Vary: Accept
X-Powered-By: Express
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
Content-Length: 122
Content-Type: application/x-www-form-urlencoded
Cookie: _pk_id.1.1fff=4f1336d9f261664a.1582821964.25.1588434091.1588433995.; connect.sid=s%3ADgr_CIN27utlSh7zmUnY9VhmXdZawYzT.7R8N92Gq48haIC63VqHf%2BnLrlhOKkDO%2BKcQQHhOGfq8
Host: localhost:5213
Origin: http://localhost:5213
Referer: http://localhost:5213/home/profile/jvillegas
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36 Edg/81.0.416.68
_method: PUT
User[firstName]: Johnny
User[lastName]: Villegas
User[dob]: 1900-10-20
User[email]: xxxxxxx@gmail.com
Похоже, что запрос отправляется, но не попадает в фактический маршрут.
Вот мое основное приложение. js файл тоже только для подтверждения маршрутов:
//==================================================================
// Package Requires
//==================================================================
var express = require("express"),
app = express(),
bodyParser = require("body-parser"),
mongoose = require("mongoose"),
passport = require("passport"),
LocalStrategy = require("passport-local"),
methodOverride = require("method-override"),
passportLocalMongoose = require("passport-local-mongoose"),
dotenv = require('dotenv').config(),
flash = require("connect-flash"),
User = require("./models/user");
//requiring routes
var indexRoutes = require("./routes/index.js"),
homeRoutes = require("./routes/home");
//==================================================================
// Mongoose/Body Parser/ View Engine
//==================================================================
mongoose.connect(
`${process.env.DBURI}`
);
app.use(bodyParser.urlencoded({ extended: true }));
app.set("view engine", "ejs");
app.use(express.static(__dirname + "/public"));
app.use(methodOverride("_method"));
app.use(flash());
//==================================================================
// Passport Setup
//==================================================================
app.use(
require("express-session")({
secret:
"xxxxx",
resave: false,
saveUninitialized: false
})
);
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use(function(req, res, next) {
res.locals.currentUser = req.user;
res.locals.regularMessage = req.flash("regular");
res.locals.loginerror = req.flash("loginerror");
res.locals.error = req.flash("error");
res.locals.registererror = req.flash("registererror");
res.locals.joining = req.flash("joining");
next();
});
//==================================================================
// Router Uses
//==================================================================
app.use("/", indexRoutes);
app.use("/home", homeRoutes);
//==================================================================
// APP.LISTEN Route
//==================================================================
// process.env.PORT
app.listen(process.env.PORT, process.env.IP, function() {
console.log("***The Time Tracking Application has Started.***");
});
Маршрут профиля находится на маршруте / home.
Любая помощь с этим был бы признателен.
Спасибо!