Node.js 尝试登录时请求错误-passport,express

Node.js 尝试登录时请求错误-passport,express,node.js,express,passport.js,Node.js,Express,Passport.js,这是app.js var express = require('express'); var session = require('express-session'); var mongoose = require('mongoose'); var multer = require('multer'); var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var p

这是app.js

var express = require('express');
var session = require('express-session');
var mongoose = require('mongoose');
var multer = require('multer');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var passportLocalMongoose = require('passport-local-mongoose');
var app = express();
var uploadDir = __dirname + '/uploads';

mongoose.connect('mongodb://orion:orion@127.0.0.1:27017/test');

var Schema = mongoose.Schema;
var userSchema = new Schema({
    name: String,
    email: String,
    password: String,
    pp: String
});
var users = mongoose.model('users', userSchema);
var port = process.env.PORT || 3000;

app.set('views', './views');
app.set('view engine', 'jade');
app.use('/assets', express.static(__dirname + '/public'));
app.use(session({secret: 'supernova', saveUninitialized: true, resave: true}));
app.use(passport.initialize());
app.use(passport.session());

userSchema.plugin(passportLocalMongoose);
passport.serializeUser(function (user, done) {
    done(null, user.id);
});

passport.deserializeUser(function (id, done) {
    users.findById(id, function (err, user) {
        done(err, user);
    });
});
passport.use(new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password'
}, function (username, password, done) {

    users.findOne({email: username}, function (err, user) {
        if (err) {
            return done(err);
        }
        if (!user) {
            return done(null, false, {message: 'Incorrect username.'});
        }
        if (!user.validPassword(password)) {
            return done(null, false, {message: 'Incorrect password.'});
        }
        return done(null, user);
    });
}));


app.all('/', function (req, res) {
    res.render('login');

})

app.all('/register', function (req, res) {
    res.render('register');
})

app.all('/login', function (req, res) {
    res.render('login');
})

var pp = Date.now() + '.jpg';

var storage = multer.diskStorage({
    destination: function (request, file, callback) {
        callback(null, uploadDir);
    },
    filename: function (request, file, callback) {
        console.log(file);
        callback(null, pp);
    }
});
var upload = multer({storage: storage}).single('proPic');

app.all('/doReg', upload, function (request, response) {
    var user = users({
        'name': request.body.name,
        'email': request.body.email,
        'password': request.body.password,
        'pp': pp
    })
    user.save(function (err) {
        if (err) throw err;
    });

    var url = request.protocol + '://' + request.get('host') + '/login'
    response.writeHead(301,
        {Location: url}
    );
    //response.redirect('/login');
    response.end();
});

app.all('/doLogin', passport.authenticate('local'), function (req, res) {
    console.log('abc');

    res.redirect('/');
});

app.listen(port);
这是login.jade

doctype html
html
    head
        title.
            Fonebook
        link(rel='stylesheet', href='/assets/bootstrap/css/bootstrap.min.css')
        script(src='https://code.jquery.com/jquery-2.2.0.min.js')
        script(src='/assets/bootstrap/js/bootstrap.min.js')
    body
        div.container
            h3.
                The Fonebook
            form(method="post",action="/doLogin",class="center",id="loginForm")
                div.panel.panel-info
                    div.panel-heading.
                        Login
                    div.panel-body
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            label.
                                Email:
                            input.form-control(id="email", type="email", name="email", placeholder="Enter email ")
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            label.
                                Password:
                            input.form-control(id="password", type="password", name="password")
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            a(href='register').
                                Don't have an account?
                    div.panel-footer
                        button.btn.btn-info(type="submit").
                            Login
may b不需要理解我的问题,但这是package.json

{
  "name": "fonebook",
  "version": "1.0.0",
  "description": "a simple phonebook",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "phonebook"
  ],
  "author": "Orion",
  "license": "ISC",
  "dependencies": {
    "express": "^4.13.4",
    "express-session": "^1.13.0",
    "jade": "^1.11.0",
    "mongoose": "^4.3.6",
    "multer": "^1.1.0",
    "passport": "^0.3.2",
    "passport-local": "^1.0.0",
    "passport-local-mongoose": "^4.0.0"
  }
}
现在的问题是,当我尝试登录浏览器时,浏览器显示“错误请求”

我在本地安装了mongodb,其中有一个名为“test”的DB,其中包含“users”集合


这里有什么问题吗?是的,我是个笨蛋。

也许这能帮助你回答这个问题。我忘了添加主体解析器模块,这解决了我的问题。也许这可以帮助你回答。我忘了添加body解析器模块,这解决了我的问题。