Node.js 在Pug/Jade中迭代未知JSON
我正在使用node/express构建我的第一个api,并尝试创建一个简单的Jade视图,该视图将跨一系列不同的模型呈现JSON,因此我不想为我拥有的每个模型创建不同的视图。我只想对任何响应进行迭代,并在表中显示结果。是否有一个通用版本可以做到这一点 这是我的express文件中的内容:Node.js 在Pug/Jade中迭代未知JSON,node.js,express,iteration,pug,sequelize.js,Node.js,Express,Iteration,Pug,Sequelize.js,我正在使用node/express构建我的第一个api,并尝试创建一个简单的Jade视图,该视图将跨一系列不同的模型呈现JSON,因此我不想为我拥有的每个模型创建不同的视图。我只想对任何响应进行迭代,并在表中显示结果。是否有一个通用版本可以做到这一点 这是我的express文件中的内容: /* Post a STATE and send to update.jade view*/ router.post('/', function(req, res, next) { State.b
/* 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
});
})
});
以下是我目前在jade view中看到的内容:
extends layout
block content
h1= title
table
each value, index in data
tr
td= index
td= value
作为get呼叫的结果,我有:
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,如果这样有帮助的话。如果您只需要显示原始json代码,您可以这样做:
块内容
code=JSON.stringify(数据,null,2)
如果迭代本身很重要,比如如果您需要对json数据中的每个元素执行某些操作,那么可以使用递归mixin实现数据遍历(我在这里实现的是一个列表,但可以想象,您可以通过某种方式对表执行类似的操作):
您可以在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}
。这将导致不创建模型的任何实例。它将只从数据库返回指定的列,而不进行任何格式化
如果为true,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
});
})
});