dpat0074
dpat0074

Reputation: 175

Why do my POST requests keep infinitely loading?

Im trying to build a node.js application and when I try to do a post request on a register or login method, it seems to keep loading and not do anything. I get the following error in my web broswer - "localhost didn’t send any data" . Here is the way I have my code setup:

var express = require("express"),
app = express(),
bodyParser = require("body-parser"),
mongoose = require("mongoose"),
passport = require("passport"),
flash = require("connect-flash"),
LocalStrategy = require("passport-local"),
methodOverride = require("method-override"),
User = require("./models/user");

mongoose.connect("mongod://localhost/supportApp_v1");
app.use(bodyParser.urlencoded({extended:true}));
app.set("view engine", "ejs");
app.use(express.static(__dirname + "/public"));
app.use(methodOverride("_method"));
app.use(flash());

app.use(require("express-session")({
secret: "luck",
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.error = req.flash("error");
  res.locals.success = req.flash("success");
  next();
});

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

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

app.post("/register", function(req, res){
var newUser = new User({username: req.body.username});
User.register(newUser, req.body.password, function(err, user){
    if (err) {
        return res.render("register", {"error": err.message});
    } else {
        passport.authenticate("local")(req, res, function(){
            req.flash("success", "Welcome " + user.username);
            res.redirect("/");
        });
    }
   });
 });

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

app.post("/login", passport.authenticate("local",
{
    successRedirect: "/",
    failureRedirect: "/login",
}), function (req, res){
});

app.listen(process.env.PORT || 3000, process.env.IP, function(){
console.log("Server has started");
});

The model that Im using:

 var mongoose = require("mongoose");
 var passportLocalMongoose = require("passport-local-mongoose");

 var UserSchema = new mongoose.Schema({
 username: String,
 password: String,
 email: String,
 age: Number
});

UserSchema.plugin(passportLocalMongoose);

module.exports = mongoose.model("User", UserSchema);

and a registration form:

  <div class="container" id="regContainer">
 <h1>Register</h1>
 <hr>
 <form action="/register" method="POST">

    <div class="form-group row">
        <label for="regUser" class="col-sm-2 col-form-label">Username:
 </label>
        <div class="col-sm-10">
            <input id="regUser" type="text" name="username" placeholder="Username">
        </div>
    </div>

    <div class="form-group row">
        <label for="regUser" class="col-sm-2 col-form-label">Email:</label>
        <div class="col-sm-10">
            <input id="regUser" type="text" name="email" placeholder="Email">
        </div>
    </div>

    <div class="form-group row">
        <label for="regPass" class="col-sm-2 col-form-label">Password:</label>
        <div class="col-sm-10">
            <input id="regUser" type="password" name="password" placeholder="Password">
        </div>
    </div>

    <div class="form-group row">
        <label for="regPass" class="col-sm-2 col-form-label">Age:</label>
        <div class="col-sm-10">
            <input id="regUser" type="number" name="age" placeholder="Age">
        </div>
    </div>

<div class="form-group row">
    <div class="offset-sm-2 col-sm-10">
        <button type="submit" class="btn btn-primary">Register</button>
    </div>
</div>

Upvotes: 2

Views: 2519

Answers (1)

Treefish Zhang
Treefish Zhang

Reputation: 1161

Connection via Mongoose is

mongoose.connect('mongodb://localhost/myapp');

Yours is missing a d. @MariaInesParnisari also suspected connection problem. I also notice that your register.html is missing a dew tags near the end such as </form>(may be due to incomplete copy-and-paste). I also wonder where you place the .html files, as you did not set the path for 'views' , for example

app.set('views', path.join(__dirname, '/views'));

Perhaps you are using the default?

Upvotes: 2

Related Questions