2017-02-17 137 views
1

我正在构建我的第一个api with node/express,并试图创建一个简单的Jade视图,这将在一堆不同的模型中呈现JSON,所以我不想拥有为我拥有的每个型号创建不同的视图。我只是想遍历任何响应,并将结果吐出一张表。有没有一个通用版本可以做到这一点?在Pug/Jade中迭代未知的JSON

这是我在我的快递文件:

/* Post a STATE and send to update.jade view*/ 

router.post('/', function(req, res, next) { 
    State.build(req.body).save() 
     .then(function(State){ 
      res.render("update", { 
       title: "States Post", 
       data: State 
      }); 

     }) 
}); 

/* GET all STATES and send to a update.jade view */ 

router.get('/', function(req, res, next) { 
    State.findAll().then(function(States){ 
     res.render("update", { 
      title: "States Get All", 
      data: States 
     }); 
    }) 
}); 

这里就是我目前在玉观点:

extends layout 
block content 
    h1= title 
    table 
     each value, index in data 
      tr 
       td= index 
       td= value 

至于获得致电我有一个结果:

States Get All 

0 [object SequelizeInstance:State] 

而对于后它吐出:

States Post 

dataValues [object Object] 
_previousDataValues [object Object] 
_changed [object Object] 
$modelOptions [object Object] 
$options [object Object] 
hasPrimaryKeys true 
__eagerlyLoadedAssociations 
isNewRecord false 
_customGetters [object Object] 
_customSetters [object Object] 
validators [object Object] 

(etc. it goes on...) 

任何帮助超级赞赏。我存储在Postgres数据库中并使用Sequelize,如果有帮助的话。

回答

1

您使用甘蔗toJSON()方法上sequelize模型的每个实例,这将返回一个javascript对象与key : value对,其中每key是先前所定义sequelize模型的属性

router.post('/', function(req, res, next) { 
    State.build(req.body).save() 
     .then(function(State){ 
      res.render("update", { 
       title: "States Post", 
       data: State.toJSON() // will return simple object 
      }); 

     }) 
}); 

router.get('/', function(req, res, next) { 
    State.findAll().then(function(States){ 
     res.render("update", { 
      title: "States Get All", 
      data: return States.map((state) => { return state.toJSON(); }); // this will create an array of simple objects 
     }); 
    }) 
}); 

EDIT

您也可以在findAll()方法中使用{ raw: true }。这将导致不会创建任何模型实例。它将简单地从数据库中返回指定的列而不进行任何格式化。

如果为真,sequelize不会试图格式化查询结果,或从结果建立模型的实例

+0

谢谢!这是我需要的 - 简单而有效。 – evdillon

0

如果你需要做的是显示原始JSON代码,你可以做这样的事情:

block content code=JSON.stringify(data, null, 2)

如果迭代本身是很重要的,就像如果你需要做的事情给每个元素在你的JSON数据,你可以实现一个递归混入数据遍历(一个我已经在这里实现的是一个列表,但你可以想见,做一个表格类似的东西,以某种方式):

mixin traverse(data) 
    if Array.isArray(data) 
    ul 
     each value in data 
     li 
      +traverse(value) 
    else if typeof data === 'object' 
    dl 
     each value, index in data 
     dt=index 
     dd 
      +traverse(value) 
    else 
    span=data