2016-07-02 9 views
0

Ich habe eine kleine Frage über die Anzeige von Benutzernamen aus meiner Mongo/Mungo-Datenbank in einer HTML-Seite. Bis jetzt habe ich diesen Code geschrieben, der alle Benutzer aus der Datenbank in meiner Konsole ausgibt, und es funktioniert gut.Angezeigte Benutzernamen in MongoDB/Mongoose/Lenker

Aber ich möchte in der Lage sein, die Benutzernamen in einer netten kleinen Tabelle auf meiner HTML-Seite auszudrucken. Etwas wie dieses:

<table class="table"> 
    <tr> 
     <td> 
      {{I want my users to be displayed here in a list.}} 
     </td> 
    </tr> 
</table> 

Ich benutze Lenker als meine Ansichtsmotor. Jede Hilfe bei der Lösung dieses Problems wird sehr geschätzt werden, da ich seit einem Tag daran festhalte. Wenn Sie mein Benutzerschema oder etwas anderes brauchen, sagen Sie es mir einfach und ich poste es. Dank

index.js

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


// Get Homepage 
router.get('/', ensureAuthentication, function (req, res) { 
    res.render('index'); 
}); 

// Get Assignments 
router.get('/assignments', ensureAuthentication, function (req, res) { 
    res.render('assignments'); 
}); 

// Get userlist 
router.get('/userslist', ensureAuthentication, function (req, res) { 
    res.render('userslist'); 
}); 


function ensureAuthentication(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } else { 
     res.redirect('/users/login'); 
    } 
} 

module.exports = router; 

users.js

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

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

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

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

// Register User 
router.post('/register', function (req, res) { 

    var name = req.body.name; 
    var email = req.body.email; 
    var username = req.body.username; 
    var password = req.body.password; 
    var password2 = req.body.password2; 

    // Validation 
    req.checkBody('name', 'Name is required').notEmpty(); 
    req.checkBody('email', 'Email is required').notEmpty(); 
    req.checkBody('email', 'Email is not valid').isEmail(); 
    req.checkBody('username', 'Username is required').notEmpty(); 
    req.checkBody('password', 'Password is required').notEmpty(); 
    req.checkBody('password2', 'Passwords do not match').equals(req.body.password); 

    var errors = req.validationErrors(); 

    if (errors) { 
     res.render('register', { 
      errors: errors 
     }); 
    } else { 
     var newUser = new User({ 
      name: name, 
      email: email, 
      username: username, 
      password: password 
     }); 

     User.createUser(newUser, function (err, user) { 
      if (err) throw err; 
      console.log(user); 
     }); 

     req.flash('success_msg', 'You are now registered. Redirecting to login page.'); 

     res.redirect('/users/login'); 

    } 
}); 

passport.use(new LocalStrategy(
    function (username, password, done) { 
     User.getUserByUsername(username, function (err, user) { 
      if (err) throw err; 
      if (!user) { 
       return done(null, false, { message: 'Unknown User' }); 
      } 

      User.comparePassword(password, user.password, function (err, isMatch) { 
       if (err) throw err; 
       if (isMatch) { 
        return done(null, user); 
       } else { 
        return done(null, false, { message: 'Invalid password' }); 
       } 
      }); 
     }); 
    })); 

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

passport.deserializeUser(function (id, done) { 
    User.getUserById(id, function (err, user) { 
     done(err, user); 
    }); 
}); 

router.post('/login', 
    passport.authenticate('local', { successRedirect: '/', failureRedirect: '/users/login', failureFlash: true }), 
    function (req, res) { 
     res.redirect('/'); 
    }); 

router.get('/logout', function (req, res) { 
    req.logout(); 

    req.flash('success_msg', 'Logged out successfully.'); 

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


// Get users 
User.find(function (err, users, res) { 
    if (err) return console.error(err); 
    res.render('users', { userList: users }); 
    //console.log(users); 
}); 


module.exports = router; 

Antwort

1

Verwenden res.render() Ihre Ansicht machen innerhalb der Callback:

router.get('/overview', function(req, res) { 
    User.find(function (err, users, res) { 
    if (err) return res.sendStatus(500); 
    res.render('users', { userList : users }); 
    }); 
}); 

Dann in Ihrer Vorlage, Sie render die Liste der Benutzer (übergeben als userList durch die res.render Aufruf):

<td> 
    <ul> 
    {{#each userList}} 
     <li>{{name}}</li> 
    {{/each}} 
    </ul> 
</td> 

(name sollte der Name der Eigenschaft in Ihrem Schema sein, die den Benutzernamen enthält)

+0

Vielen Dank für die Antwort, aber Typeerror Ich erhalte: Kann nicht Eigentum lesen ‚machen‘ von nicht definiert. Ich habe dies schon einmal beim Versuch, Render() zu verwenden, aber ich habe keine Ahnung, wie man es lösen :( –

+0

Können Sie den Code Ihrer Express-Route (die die Ansicht rendern) auf Ihre Frage hinzufügen? – robertklep

+0

Added index.js und users.js gerade. Es sind die zwei Routen, die ich in meiner API im Moment verwende. –