我正在使用node / express构建我的第一个api,并尝试创建一个简单的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,如果有帮助的话。
答案 0 :(得分:1)
你可以在sequelize模型的每个实例上使用toJSON()
方法,这将返回一个key : value
对的javascript对象,其中每个key
都是先前定义的续集模型的属性
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
});
})
});
修改强>
您还可以在{ raw: true }
方法中使用findAll()
。这将导致不创建任何模型实例。它只会从数据库中返回指定的列而不进行任何格式化。
如果为true,则sequelize不会尝试格式化查询结果,也不会从结果中构建模型实例
答案 1 :(得分:0)
如果您只需显示原始json代码,则可以执行以下操作:
block content
code=JSON.stringify(data, null, 2)
如果迭代本身很重要,就像你需要对json数据中的每个元素做一些事情一样,你可以使用递归mixin实现数据遍历(我在这里实现的是一个列表,但是你可以想象用桌子做类似的事情,不知何故):
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