【问题标题】:how to make dynamic cards and iterate through arrays in ejs如何制作动态卡片并遍历ejs中的数组
【发布时间】:2021-09-01 09:36:19
【问题描述】:

我是 node jsejs templating 的新手。我正在尝试建立一个网站。我需要根据数据库中的计数制作动态配置文件卡。我正在使用mysqlsequelize。当我使用FindAndCountAll 时,我有一个数组

{
    count: 3,
    rows: [
        patient_data {
            dataValues: [Object],
            _previousDataValues: [Object],
            _changed: Set(0) {},
            _options: [Object],
            isNewRecord: false
        },
        patient_data {
            dataValues: [Object],
            _previousDataValues: [Object],
            _changed: Set(0) {},
            _options: [Object],
            isNewRecord: false
        },
        patient_data {
            dataValues: [Object],
            _previousDataValues: [Object],
            _changed: Set(0) {},
            _options: [Object],
            isNewRecord: false
        }
    ]
}
    

我从 console.log 'gen' 从这个 api 得到的

Login: async(req,res,next) => {

    try {
        if(!req.body){
            throw new Error(" sorry no data");
        }

        const { name, password} = req.body;
        console.log("b",name)
        const user= await models.machine.findOne({
            where:{
                name:m_name
            },
        });


        if (user) {
            let isPassWordCorrect =  await bcrypt.compare(password,user.password)
            if(isPassWordCorrect){

                const gen= await models.patient_data.findAndCountAll({
                    attributes:[
                        "p_id","gender","name",
                    ],
                    where:{
                        m_name:machine_name
                    }
                });

                var arr = gen;
                console.log(arr,"ae")

                res.render('dash',{ posts: gen })

                console.log(posts)

            } else {
                res.redirect('/Login')
            }
        } else {
            res.status(400).json({
                message:"unsuccess , an errror occured",
            })
        }

    } catch (err) {
        res.status(400).json({
            message:err.toString(),
        });
    }
}

当我使用FindAll 时,我会得到这个带有数据值的数组。

[
    patient_data {
        dataValues: { p_id: '054', gender: 'M', name: 'Pau' },
        _previousDataValues: { p_id: '054', gender: 'M', name: 'Pau' },
        _changed: Set(0) {},
        _options: {
            isNewRecord: false,
            _schema: null,
            _schemaDelimiter: '',
            raw: true,
            attributes: [Array]
        },
        isNewRecord: false
    },
    patient_data {
        dataValues: { p_id: '075', gender: 'M', name: 'Dav' },
        _previousDataValues: { p_id: '075', gender: 'M', name: 'Dan' },
        _changed: Set(0) {},
        _options: {
            isNewRecord: false,
            _schema: null,
            _schemaDelimiter: '',
            raw: true,
            attributes: [Array]
        },
        isNewRecord: false
    },
    patient_data {
        dataValues: { p_id: '75', gender: 'M', _name: 'vin R' },
        _previousDataValues: { p_id: '75', gender: 'M', _name: 'vin R' },
        _changed: Set(0) {},
        _options: {
            isNewRecord: false,
            _schema: null,
            _schemaDelimiter: '',
            raw: true,
            attributes: [Array]
        },
        isNewRecord: false
    }
]


    

问题是我无法根据计数创建动态卡片并将其显示在我的ejs 页面中。我正在使用expressejsmysqlsequelize。我需要尽可能地渲染数组,但是捕获渲染的值并将其显示在我的ejs 页面上有点令人困惑。有没有办法遍历这个数组并显示每张卡片中的值。谁能帮帮我。

提前致谢

【问题讨论】:

    标签: node.js express sequelize.js ejs


    【解决方案1】:

    问题可能是由于将模型实例发送到ejs 渲染器。试试这个查询:

    const gen = await models.patient_data.findAndCountAll({
        attributes:[
          "p_id","gender","name",
        ],
        where:{
          m_name:machine_name
        },
        raw: true
      });
    

    raw option 只会返回数据,更适合ejs。然后,您可以在 ejs 文件中执行以下操作:

    <h1>
        Patient Data Test
    </h1>
    <ul>
        <% locals.posts.rows.forEach(function (patient) { %>
            <li class="patient-data">
                <div>Name: <%= patient.patient_name %></div>
                <div>Gender: <%= patient.gender %></div>
            </li>
        <% }); %>
    </ul>
    

    而且,虽然我在 CSS 方面不是那么出色,但可能是这样的:

    * {
        font-family: arial, helvetica, verdana, sans-serif;
    }
    
    ul {
        list-style-type: none;
    }
    
    .patient-data {
        box-shadow: 0 0 15px #ccc;
        border-radius: 5px;
        padding: 1rem;
        line-height: 1.5rem;
    }
    
    .patient-data:not(:first-child) {
        margin-top: 1.5rem;
    }
    

    【讨论】:

    • 嗨,我得到了这个输出 { count: 3, rows: [ { p_id: 'PAU054', gender: 'M', patient_name: 'Paul Pavish' }, { p_id: 'DAV075', gender :'M',患者姓名:'Davincy'},{ p_id:'MAR075',性别:'M',患者姓名:'Marvin R'}] }
    • 在我的 ejs 中我使用了这个

        患者数据测试

      显示我的价值观。我知道,因为输出是一个字符串 forEach 不能使用。如何解决这个队友。
    • @fungusblacky 添加了ejscss sn-ps。您仍然可以使用.forEach(...)。希望这会有所帮助!
    猜你喜欢
    • 2017-08-08
    • 2022-11-21
    • 1970-01-01
    • 2019-12-17
    • 2011-02-25
    • 2021-11-25
    • 2020-10-02
    • 2018-02-22
    • 2018-10-09
    相关资源
    最近更新 更多