将数据从 Express 迭代到 EJS

Iterate data from Express to EJS

我真的很困惑:

<script>
    const i = 0
    const data = "<%= dataMedico[0].user %>" // Fine
    const data2 = `<%= dataMedico[${i}].user %>` // Error
</script>

假设第二个使用常量“i”来return我的值“user”,但它只是 return 给我这个错误:

SyntaxError: Unexpected token '{' in myRoot\views\index.ejs while compiling ejs

我需要迭代 dataMedico 以将用户与这样的表单数据进行比较:

function verificator() {
        for(let i = 0; i < 10; i++) {

            const userMedicos = `<% dataMedico[${i}].usuario %>`
            const passwordMedicos = `<% dataMedico[${i}].contrasenia %>`

            const text = document.getElementById("user").value
            const pass1 = document.getElementById("password").value

            if (text === userMedicos && pass1 === passwordMedicos) {
                button.href = "principal"
            } else {
                alert("ERROR.");
            }
        }
    }

你能推荐我另一种更简单的方法吗?

Javascript 模板字符串是在浏览器解析 Javascript 时计算的,而不是在 EJS 呈现页面时计算的。如果这里的最终目标是让您的 verificator() 函数在网页的 Javascript 中工作,那么您将需要将整个 dataMedico 数据呈现到页面的 Javascript 使用 EJS。

然后,您页面的 Javascript 可以像引用任何 Javascript 变量的数据一样引用该数据。

因此,下面介绍了如何将 dataMedico 数据作为 Javascript 变量嵌入到页面中。

<script>
    const dataMedico = <%- JSON.stringify(dataMedico) %>;
</script>

然后您可以像这样在 verificator() 函数中使用它:

<script>

function verificator() {
        for(let i = 0; i < 10; i++) {

            const userMedicos = dataMedico[i].usuario;
            const passwordMedicos = dataMedico[i].contrasenia;

            const text = document.getElementById("user").value
            const pass1 = document.getElementById("password").value

            if (text === userMedicos && pass1 === passwordMedicos) {
                button.href = "principal"
            } else {
                alert("ERROR.");
            }
        }
    }

</script>

请注意 verificator() 函数似乎不完整。您 运行 循环了 10 次,但是您的 elsealert() 可能多达 10 次。我想你并不是真的想要那样。