如何将 ExpressJS 局部变量传递给 EJS 模板并将其用作从 onload HTML 事件调用 JS 函数的参数

问题描述 投票:0回答:2
const hostname = "192.168.8.154";
const port = 3002;

app.use('*', function (req, res, next) {

    db.collection('sys_params').find().toArray()
    .then(sysParams => {
        //console.log(sysParams);
        app.locals.sysParams = sysParams;
        app.locals.ipAddress = hostname;
        app.locals.portNo = port;
        app.locals.url = hostname + ':' + port;
    })
    .catch(error => console.error(error))
    next()

})

在这里,我需要使用 EJS HTML 标记将硬编码的 IP 地址和端口替换为来自 ExpressJS 的 app.locals.url。

  <body onload="landingPage('192.168.8.154:3002')">

用作

  <body onload="landingPage(<% url%>)">
            <script type="text/javascript">

              function landingPage(ipAddress){
                // Random Desktop image on-load 
                let loginDesktopArr = ["1-Sunday.jpg", "2-Monday.jpg", "3-Tuesday.jpg", "4-Wedsday.jpg", "5-Thursday.jpg", "6-Friday.jpg", "7-Saturday.jpg"];
                let loginDesktopImg = loginDesktopArr[Math.floor(Math.random() * loginDesktopArr.length)];
                let loginDesktopUrl = "'http://"+ipAddress+"/img/" + loginDesktopImg + "'";
                document.getElementById('header').style = "background-image: url(" + loginDesktopUrl + ");";
              }

            </script>

在 JS 函数调用中使用 EJS 标签,我收到预期的错误 url is not Defined。

    25|     <title><%= __('LandingPageTabTitle') %></title>
    26|   </head>
 >> 27|   <body onload="landingPage(<% url%>)">
    28|   
    29|          <nav class="navbar navbar-fixed-top">
    30|          

url is not defined
javascript html node.js express ejs
2个回答
0
投票

将网址用单引号括起来

<body onload="landingPage('<%= url%>')">

-1
投票

Deberás 定义变量:

const url = app.locals.url

© www.soinside.com 2019 - 2024. All rights reserved.