在Pug/Jade中迭代未知的JSON
问题描述:
我正在构建我的第一个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,如果有帮助的话。
答
您使用甘蔗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不会试图格式化查询结果,或从结果建立模型的实例
答
如果你需要做的是显示原始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
谢谢!这是我需要的 - 简单而有效。 – evdillon