Nodejs Express Форма PUT просто обновляет страницу без попадания в маршрут - PullRequest
1 голос
/ 06 мая 2020

У меня проблема, когда когда я нажимаю кнопку «Отправить» в форме 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.

Любая помощь с этим был бы признателен.

Спасибо!

...