在Pug / Jade中迭代未知的JSON

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

这是我的快递文件中的内容:

/* 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] 

而对于这个post,它吐出来了:

 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,如果有帮助。

您可以在每个sequelize模型的实例上使用toJSON()方法,它将使用key : value对返回一个javascript对象,其中每个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 }); }) }); 

编辑

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

如果为true,则sequelize不会尝试格式化查询的结果,或者从结果中构build模型的实例

如果你只需要显示原始的json代码,你可以这样做:

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

如果迭代本身很重要,比如如果你需要对你的json数据中的每个元素做些什么,你可以用一个recursion混合来实现数据遍历(我在这里实现的是一个列表,但是你可以想象做类似的事情有一张桌子,不知何故):

 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