2017-08-28 3 views
1

Ich baue eine Website, und ich habe ein Registrierungsformular, wo ich ein Formular per POST senden muss, und einen Benutzer in einer MongoDB-Datenbank registrieren. Die Website funktioniert soweit, aber wenn ich das Anmeldeformular abschicke, "wartet" der Browser für immer auf localhost. Ich benutze EJS als Template-Engine, obwohl ich das nicht für wichtig halte.Browser wartet auf localhost auf POST-Anfrage

register.ejs:

<% include partials/header %> 
<%include partials/nav %> 
<h1>REGISTER</h1> 
<a href="/login">Login</a> 

<form id="registerForm" action="/register" method="post"> 
      <div class="form-group"> 
       <label for="exampleInputEmail1">Email address</label> 
       <input type="email" name="username" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email"> 
       <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small> 
      </div> 
      <div class="form-group"> 
       <label for="exampleInputPassword1">Password</label> 
       <input type="password" name="password" class="form-control" id="exampleInputPassword1" placeholder="Password"> 
       <small id="passwordHelp" class="form-text text-muted">Your password must be at least 8 characters long.</small> 
      </div> 
      <button type="submit" class="btn btn-primary">Submit</button> 
     </form> 
<% include partials/footer %> 

app.js:

var express = require('express'), 
    app = express(), 
    mongoose = require('mongoose'), 
    passport = require("passport"), 
    bodyParser = require("body-parser"), 
    User = require("./models/user"), 
    LocalStrategy = require("passport-local"), 
    passportLocalMongoose = require("passport-local-mongoose"); 

//Set up MongoDB 
var mongo = require("mongo"); 
var MongoClient = require('mongodb').MongoClient; 
var assert = require('assert'); 
var ObjectId = require('mongodb').ObjectID; 
var url = 'mongodb://localhost:27017/customerapp'; 
//MongoJS 
var mongojs = require("mongojs"); 
var db = mongojs("customerapp", ["users"]); 
//Mongoose 
var mongoose = require('mongoose'); 
mongoose.Promise = global.Promise 
mongoose.createConnection("mongodb://localhost:27017/customerapp"); 
app.set('view engine', 'ejs'); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(require("express-session")({ 
    secret: "wah wah wah", 
    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()); 


var index = require("./routes/index"); 
var about = require("./routes/about"); 
var login = require("./routes/login"); 
//var register = require("./routes/register"); 

app.all("index", index); 
app.all("about", about); 
app.all("login", login); 
//app.all("register", register); 

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

//Handle post register req. at '/register' 
app.post("/register", function(req, res) { 
    User.register(new User({ 
     username: req.body.username}), 
     req.body.password, 
     function(err, user) { 
      if(err) { 
       console.log(err); 
       return res.render("register"); 
      } 
      passport.authenticate("local")(req, res, function() { 
       res.redirect("/secret") 
      }) 
    }); 
}); 
app.listen(process.env.PORT || 3000, process.env.IP, function() { 
    console.log('Example app listening on port 3000!') 
}) 

Antwort

1

Sie sind statt zwei drei params verwenden, ist es wie folgt verwenden.

//Handle post register req. at '/register' 
app.post("/register", function(req, res) { 
    User.register(new User({ 
     username: req.body.username, 
     password: req.body.password 
     }), 
    function(err, user) { 
     if(err) { 
      console.log(err); 
      return res.render("register"); 
     } 
     passport.authenticate("local")(req, res, function() { 
      res.redirect("/secret") 
     }) 
}); 
}); 
+0

Bitte lassen Sie mich wissen, ob es geklappt hat – turmuka