Tengo un programa nodejs simple, donde estoy recuperando los datos de mongodb usando Mongoose y quería mostrarlos como una tabla usando jade. Aquí está mi código:
Código del lado del servidor
router.get('/', function(req, res, next) { //Query the user table user.find(function(err, result){ res.render('index',{users: JSON.stringify(result)}); }); });código de jade
div form(action='/',method='post') div(data-role='fieldcontain') fieldset(data-role='controlgroup') label(for='name') User Name input(id='name',type='text',value='',placeholder='Type your username here',name='name') div(data-role='fieldcontain') fieldset(data-type='vertical', data-role='controlgroup') label(for='fname') First Name input(id='fname',type='text',value='',placeholder='Type your first name here',name='fname') div(data-role='fieldcontain') fieldset(data-type='vertical', data-role='controlgroup') label(for='lname') Last Name input(id='lname',type='text',value='',placeholder='Type your last name here',name='lname') div(data-role='fieldcontain') input(type='submit',value='Create Profile',data-transition='fade', data-theme='c') - var userlist = {users} div table thead tr: th Users tbody each user in userlist tr td=userY mi modelo se ve así:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var user = new Schema({ username: String, firstname: String, lastname: String }); module.exports = mongoose.model('user', user);El problema es que jade no lee el mensaje de la ruta a jade como JSON. Intenté imprimir #{usuarios} e imprime el resultado completo. Sin embargo, en cada ciclo, no es posible separar los dos registros.
Echo un vistazo a las preguntas:
Enlace de anclaje estático de Jade
De alguna manera, siento que el mensaje no se recibe como JSON y, por lo tanto, el problema. Por favor, ¿puedes ayudar?
Probé tu código sin JSON. Stringify está funcionando bien.
Suponiendo que tiene registros para el usuario en su base de datos.
router.get('/', function(req, res, next) { User.find(function(err,result){ console.log(result); res.render('index', { title: 'Express' , users: result }); }); });aquí está el código en index.jade
extends layout block content h1= title p Welcome to #{title} -var userlist = users div table.table.table-hover thead tr: th Users tbody each user in users tr td=user.firstname td=user.lastname td=user.usernamecuando inicié mi servidor y presioné la página de índice, obtuve el siguiente resultado.
Pero cuando hice lo mismo con JSON.stringyfy() no se mostró nada aquí, pero los datos están ahí.
¡¡Espero eso ayude!! Buena suerte :)
Si desea crear automáticamente sus encabezados sin especificar los campos:
Código del lado del servidor
router.get('/', function (req, res, next) { user .find({}) .select('-_id -__v') // This removes hidden MongoDB fields .lean() // This removes all mongoose fields and return a simple javascript object .then(result => { // I'm using promises, but you can use callbacks as well console.log(result); res.render('index', { title: 'Express', users: result }); }) .catch(ex => console.log(ex)); });código de jade
extends layout block content h1= title p Welcome to #{title} -var firstUser = users[0] || undefined; if firstUser div h1 Users table.table.table-hover thead tr each value, key in firstUser th=key tbody each user in users tr each value, key in user td=value