nodejs:jade table - 来自控制器的Dynamic json

时间:2017-01-05 03:28:41

标签: json node.js mongodb express pug

我有一个简单的nodejs程序,我使用Mongoose从mongodb检索数据,并希望使用jade将其显示为表。这是我的代码:

服务器端代码

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

  //Query the user table
  user.find(function(err, result){
      res.render('index',{users: JSON.stringify(result)});   
  });
});

翡翠代码

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=user

我的模型看起来像这样:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var user = new Schema({
    username: String,
    firstname: String,
    lastname: String
});

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

问题是来自jade路由的消息不会被jade读取为JSON。我尝试打印#{users}并打印完整的结果。但是,在每个循环中,它无法分离出两个记录。

我看一下这些问题:

Jade static anchor link

Jade iterating an array

HTML Table in Jade

不知何故,我觉得这条消息并没有作为JSON收到,因此也就是问题。你能帮忙吗?

2 个答案:

答案 0 :(得分:3)

我在没有JSON的情况下尝试了你的代码。将其运行正常。

假设您的数据库中有用户的记录。

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

   User.find(function(err,result){

     console.log(result);
     res.render('index', { title: 'Express' , users: result });
   });
});

这是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.username

当我启动服务器并点击索引页面时,我得到了以下结果。

enter image description here

但是当我用JSON.stringyfy()做同样的事情时,这里没有显示任何内容,但数据就在那里。

希望它有所帮助!!祝你好运:)

答案 1 :(得分:0)

如果您想自动创建标题而不指定字段:

服务器端代码

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));
});

翡翠代码

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