Javascript 无法在nodeJS中对用户进行身份验证:类型错误:无法使用';在';操作员搜索';用户名';在fs中

Javascript 无法在nodeJS中对用户进行身份验证:类型错误:无法使用';在';操作员搜索';用户名';在fs中,javascript,node.js,express,mongoose,passport.js,Javascript,Node.js,Express,Mongoose,Passport.js,我有一个简单的表单来注册/验证用户。我能够成功注册用户,但无法进行身份验证。我试图研究这个问题,但没有发现任何有用的东西 以下是html登录表单: <form method="post" action="/login"> <input type="text" name="username" placeholder="username"> <input type="password" name="password" placeholder="passwor

我有一个简单的表单来注册/验证用户。我能够成功注册用户,但无法进行身份验证。我试图研究这个问题,但没有发现任何有用的东西

以下是html登录表单:

<form method="post" action="/login">
   <input type="text" name="username" placeholder="username">
   <input type="password" name="password" placeholder="password">
   <input type="submit" name="submit" value="submit">


</form>
app.js:

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var session = require('express-session');
var passport = require('passport');
var bodyParser = require('body-parser');
var User = require('./model/user.js');
var LocalStrategy = require('passport-local').Strategy;
var passportLocalMongoose = require('passport-local-mongoose');
var ejs = require('ejs');
var dbURL = 'mongodb://Admin:123@ds051655.mongolab.com:51655/yelpcamp';


mongoose.connect(dbURL, function(err) {
    err ? console.log(err) : console.log('successfully connected to db!');
});


app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended:true}));


app.use(session({
    secret:"sfsdfsdfsd",
    resave: false,
    saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy(User, User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.post("/login", passport.authenticate("local", {

    successRedirect: "/secret",
    failureRedirect: "/login"


}), function(req,res) {
});
user.js:

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

var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    email: String,
    pictures: [{type:mongoose.Schema.Types.ObjectId, ref: "Pictures"}],
    comments: [{type: mongoose.Schema.Types.ObjectId, ref: "Comments" }]  
});

userSchema.plugin(passportLocalMongoose);
var User = mongoose.model("User", userSchema);

module.exports = User;
package.json:

 "dependencies": {
    "body-parser": "^1.14.2",
    "connect-mongo": "^1.1.0",
    "ejs": "^2.4.1",
    "express": "^4.13.4",
    "express-session": "^1.13.0",
    "mongoose": "^4.3.7",
    "passport": "^0.3.2",
    "passport-local": "^1.0.0",
    "passport-local-mongoose": "^4.0.0"
  }

update1:为了解决这个问题,我尝试在User类中实例化User对象(mongoose.Schema已更改为new mongoose.Schema)。我还尝试将Strategy属性添加到
LocalPassport
。gnerkus指出了这些错误,但它们未能解决问题,因为我也遇到了同样的错误

发生错误是因为未实例化
用户
对象。这是因为模型无效。Mongoose模式应创建为
Mongoose.schema
构造函数的实例。您需要重构模型以使用
模式
实例:

// Create instance of 'Schema' constructor.
var userSchema = new mongoose.Schema({
    username: String,
    password: String,
    email: String,
    pictures: [{type:mongoose.Schema.Types.ObjectId, ref: "Pictures"}],
    comments: [{type: mongoose.Schema.Types.ObjectId, ref: "Comments" }]  
});
另外,
LocalStrategy
构造函数是从
passport local
Strategy
对象获得的。您需要替换此行:

var LocalStrategy = require('passport-local');
var LocalStrategy = require('passport-local').Strategy;
这一行:

var LocalStrategy = require('passport-local');
var LocalStrategy = require('passport-local').Strategy;

谢谢你的回复。我尝试了这段代码,但同样的问题仍然存在。我已经找到了解决方案。请看更新后的答案。我做了建议的更改(基本上是在mongoose.Schema之前添加新的),但它不起作用;同样的问题依然存在。但是,感谢您指出此错误(: