简体   繁体   English

newUser.somefunction不是一个函数[猫鼬]

[英]newUser.somefunction is not a a function [Mongoose]

I have made a simple signup and added a function to the database and when I try to use it I get this error - TypeError: newUser.generateHash is not a function . 我进行了简单的注册,并向数据库中添加了一个函数,当我尝试使用它时,出现此错误TypeError: newUser.generateHash is not a function I'm new to passport and I figured to only use passport for login. 我是新来的护照,所以我只想使用护照进行登录。 I've disabled the routes to make the problem short. 我禁用了使问题简短的路线。

user.js user.js

    var mongoose = require('mongoose');
    var bcrypt = require('bcrypt-nodejs');

    var userSchema = mongoose.Schema({
        username: String,
        password: String
    });

    var pollsSchema = mongoose.Schema({
        pollTitle: String,
        option1: String,
        option2: String,
        option3: String,
        option4: String
    })

    userSchema.methods.generateHash = function generateHash(password) {
        return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
    }

    userSchema.methods.validPassword = function validPassword (password) {
        return bcrypt.compareSync(password, this.password);
    }


    module.exports = mongoose.model('User', userSchema);
    module.exports = mongoose.model('polls', pollsSchema);  

server.js server.js

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser')
var mongoose = require('mongoose');
var session = require('express-session')
var passport = require('passport');
var LocalStrategy = require('passport-local');
var flash = require('connect-flash');
var bcrypt   = require('bcrypt-nodejs');
var User = require('./models/user');

var app = express();
//Connection to Database
mongoose.connect('mongodb://localhost/polls');

//Post for enviorement
var port = process.env.PORT || 9000;

//Using middleware
app.use(session({
    secret: 'secretstuff',
    resave: true,
    saveUninitialized: true
}));

app.use(express.static(path.join(__dirname, '/tmp')));
app.use(express.static(path.join(__dirname, '/bower_components')));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());

//require('./config/passport')(passport);
//configuration of app

app.set('view engine', 'jade');
app.set('views', path.join(__dirname, 'views'));

//Routes
//require('./routes/dynamic.js')(app, passport);
app.get('/', function(req, res) {
    res.render('index');
});


app.post('/signup', function(req, res) {
    console.log('sdsss');
    var pattUser =  /^[a-z\S]{6,12}$/;
    var pattPass = /^[a-z\S]{8,14}$/;
    var username = req.body.username;
    var pass = req.body.password;
    var confirmpass = req.body.confirmpass;
    if(pattUser.test(username) === true && pattPass.test(pass) === true && pass === confirmpass) {
      console.log('ddddd-server');
      User.findOne({username: username}, function(err, user) {
        if(err) { return err; }
        if(user) { 
          res.jsonp({message: 'username already taken'}); 
        } else {
          var newUser = new User();
          console.log(newUser.generateHash(pass));
          newUser.username = username;
          newUser.password = newUser.generateHash(pass);

          newUser.save(function(err) {
            if(err) { return err; } 
          })
          res.jsonp({message: 'You can now Log In!'});
        }
      })
    }
});

app.listen(port, function() {
    console.log('Our app is running on http://localhost:' + port);
});

You cannon use 'module.exports = ' more then one time. 您可以使用'module.exports ='超过一次。 The second statement overwrites the first one. 第二条语句覆盖第一条。 If you want to export two different schemas do that: 如果要导出两个不同的模式,请执行以下操作:

module.exports.User = mongoose.model('User', userSchema);
module.exports.Polls= mongoose.model('polls', pollsSchema);

And then on you server.js 然后在您的server.js

var schemas = require('./models/user');
var User = schemas.User;
var polls = schemas.Polls;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM