【问题标题】:Why do my POST requests keep infinitely loading?为什么我的 POST 请求会不断加载?
【发布时间】:2017-06-02 07:53:38
【问题描述】:

我正在尝试构建一个 node.js 应用程序,当我尝试在注册或登录方法上执行发布请求时,它似乎一直在加载并且没有执行任何操作。我在我的网络浏览器中收到以下错误 - “本地主机没有发送任何数据”。这是我设置代码的方式:

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");
});

我使用的模型:

 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);

和一份注册表:

  <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>

【问题讨论】:

  • 尝试清除浏览器缓存,或更改应用程序端口。或者逐步调试您的应用程序以确保客户端可以将数据推送到服务器。
  • 您确定猫鼬连接已正确建立吗?见mongoosejs.com/docs/connections.html#callback

标签: javascript node.js mongodb passport-local passport.js


【解决方案1】:

Connection via Mongoose

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

您的缺少d。 @MariaInesParnisari 也怀疑存在连接问题。我还注意到您的 register.html 在结尾处缺少露水标签,例如&lt;/form&gt;(可能是由于复制和粘贴不完整)。我也想知道您将 .html 文件放在哪里,因为您没有设置 'views' 的路径,例如

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

也许您使用的是默认值?

【讨论】:

  • 谢谢,它总是像丢失的字母这样的小事。关于为什么它现在给我“TypeError:cb 不是函数”的任何想法 - 我猜我的回调中缺少某些东西?
  • 是的,我猜某些回调可能丢失或不正确。 passport.authenticate("local")(req, res, function(){ 看起来很奇怪。 passport-local-mongoose documentation 是这样的: 'authenticate(password, cb)' 。试试passport.authenticate("local", function(req, res){...}) ?
猜你喜欢
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2013-01-17
  • 2018-10-03
相关资源
最近更新 更多