2016-04-14 9 views
0

私のmongo dbでユーザープロファイルを作成しようとしています。私はすでに基本的なユーザー登録/セッション、ログイン/ログアウトシステムを持っています。しかし、私はより多くのフィールドを追加したい。たとえば、下のコードに「名字」または「生年月日」を追加する方法は?mongodbユーザープロフィール入力の追加に問題があります

index.js

var express = require('express'); 
var passport = require('passport'); 
var Account = require('../models/account'); 
var router = express.Router(); 

router.get('/', function (req, res) { 
res.render('index', { user : req.user }); 
}); 

router.get('/register', function(req, res) { 
res.render('register', { }); 
}); 

router.post('/register', function(req, res, next) { 
console.log(req.body); 
Account.register(new Account({ username : req.body.username, firstname: req.body.firstname }) req.body.password, function(err, account) { 
    if (err) { 
     return res.render("register", {info: "Sorry. That username already exists. Try again."}); 
    } 

passport.authenticate('local')(req, res, function() { 
     req.session.save(function (err) { 
      if (err) { 
       return next(err); 
      } 
      res.redirect('/'); 
     }); 
    }); 
}); 
}); 


router.get('/login', function(req, res) { 
res.render('login', { user : req.user }); 
}); 

router.post('/login', passport.authenticate('local'), function(req, res, next) { 
req.session.save(function (err) { 
    if (err) { 
     return next(err); 
    } 
    res.redirect('/'); 
}); 
}); 

router.get('/logout', function(req, res, next) { 
req.logout(); 
req.session.save(function (err) { 
    if (err) { 
     return next(err); 
    } 
    res.redirect('/'); 
}); 
}); 

router.get('/ping', function(req, res){ 
res.status(200).send("pong!"); 
}); 

module.exports = router; 

Account.js

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

var Account = new Schema({ 
username: String, 
password: String, 
firstname: String 
}); 

Account.plugin(passportLocalMongoose); 

module.exports = mongoose.model('Account', Account); 

Register.jade

extends layout 

block content 
.containerhome 
h1 Register 
.containerhomeborder 
br 
br 
br 
br 
br 
br 
br 
br 
br 
br 
form(role='form', action="/register",method="post") 
    .form-group 
     input.form-control(type='text', name="username", placeholder='Enter Username') 
    .form-group 
     input.form-control(type='text', name="firstname", placeholder='First Name') 
    .form-group 
    input.form-control(type='password', name="password", placeholder='Password') 
    button.btn.btn-default(type='submit') Submit 
      
    a(href='/') 
    button.btn.btn-primary(type="button") Cancel 
br 
h4= info 

app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 

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

// dependencies 
var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 

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

// uncomment after placing your favicon in /public 
//app.use(favicon(__dirname + '/public/favicon.ico')); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(require('express-session')({ 
secret: 'keyboard cat', 
resave: false, 
saveUninitialized: false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(express.static(path.join(__dirname, 'public'))); 


app.use('/', routes); 

// passport config 
var Account = require('./models/account'); 
passport.use(new LocalStrategy(Account.authenticate())); 
passport.serializeUser(Account.serializeUser()); 
passport.deserializeUser(Account.deserializeUser()); 

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

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
var err = new Error('Not Found'); 
err.status = 404; 
next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
}); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
res.status(err.status || 500); 
res.render('error', { 
    message: err.message, 
    error: {} 
}); 
}); 


module.exports = app; 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
var err = new Error('Not Found'); 
err.status = 404; 
next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
app.use(function(err, req, res, next) { 
res.status(err.status || 500); 
res.render('error', { 
    message: err.message, 
    error: err 
}); 
}); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
res.status(err.status || 500); 
res.render('error', { 
message: err.message, 
error: {} 
}); 
}); 


module.exports = app; 

user.jsの

var express = require('express'); 
var router = express.Router(); 

/* GET users listing. */ 
router.get('/', function(req, res, next) { 
res.send('respond with a resource'); 
}); 

module.exports = router; 

答えて

1
Account.js

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

var Account = new Schema({ 
    username: String, 
    password: String, 
    firstname: String, 
    lastname: String, 
    dob: Date 
}); 

Account.plugin(passportLocalMongoose); 

module.exports = mongoose.model('Account', Account); 

そして、あなたは新しいモデルにフィールドを追加している:

// ... 
Account.register(new Account({ 
    username :req.body.username, 
    firstname: req.body.firstname, 
    lastname: req.body.lastname, 
    dob: req.body.dob 
}) req.body.password, function(err, account) { 
// ... 

私は高いだろうムンゴースのドキュメントを読むことをお勧めします:http://mongoosejs.com/docs/schematypes.html http://mongoosejs.com/docs/models.html

+0

私はその正確なことを試みました。しかし、それは私のデータベースに '姓'または 'dob'を入力しません。それ以外はすべて動作します。 – Ezzer

+0

@Ezzerデータベースに2つのデータが入力されていないと言うと、2つの追加フィールドなしで追加されます。間違いはありますか? –

+0

正しいことを認識しているエラーはありません。 – Ezzer

関連する問題