Node.js 在Pug/Jade中迭代未知JSON

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

我正在使用node/express构建我的第一个api,并尝试创建一个简单的Jade视图,该视图将跨一系列不同的模型呈现JSON,因此我不想为我拥有的每个模型创建不同的视图。我只想对任何响应进行迭代,并在表中显示结果。是否有一个通用版本可以做到这一点

这是我的express文件中的内容:

/*  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
        });
    })
});