【问题标题】:Populate data from mysql to ejs将数据从 mysql 填充到 ejs
【发布时间】:2017-03-01 20:03:24
【问题描述】:

Link to github https://github.com/AEkman/Quiz

我正在尝试从 mysql 数据库中获取数据并使用 EJS 打印到 html 表。

这是我从 database.js 调用的函数:

    this.getUsers = function (res) {
    connection.acquire(function (err, con) {
        con.query('SELECT * FROM user', function (err, rows, result) {
            con.release();
            if(err) {
                console.log(err);
            } else {
                obj = JSON.parse(JSON.stringify(rows));
                console.log(obj);
            }
        });
    });
};
};

这是我在 app.js 中的路线

app.get('/settings', function(req, res) {
var obj = databaseFunctions.getUsers(res);
res.render('settings', {
    obj:obj,
    title: 'Settings',
    classname: 'settings'
});
});

这是我的 EJS 代码:

<% print.forEach(function(users) { %>
<tr>
    <td><%= users.mail %></td>
    <td><%= users.name %></td>
    <td><%= users.password %></td>
    <td><%= users.groups %></td>
    <td><%= users.accountLevel %></td>
</tr>
<% }); %>

如果我 console.log(obj) 我得到:

[ { mail: 'info@andreasekman.com',
name: 'test',
password: '1234',
groups: 'java2',
accountLevel: 'User' },
{ mail: 'xtironman@hotmail.com',
name: 'ace',
password: 'ace',
groups: 'java2',
accountLevel: 'User' } ]

当我尝试运行 /settings 时,我得到以下信息:

    TypeError: C:\Users\Andreas\Documents\GitHub\Quiz\views\settings.ejs:15
   13|         <h1>Settings</h1> 
   14|         <% include partials/template/createuser.ejs %> 
>> 15|         <% include partials/template/viewusers.ejs %> 
   16|     </div><!-- row --> 
   17|     <div class="content"></div> 
   18|     <% include partials/template/footer.ejs %> 

esc is not a function
   at rethrow (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\ejs\lib\ejs.js:285:18)
   at eval (eval at compile (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\ejs\lib\ejs.js:524:12), <anonymous>:85:9)
   at eval (eval at compile (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\ejs\lib\ejs.js:524:12), <anonymous>:87:10)
   at returnedFn (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\ejs\lib\ejs.js:555:17)
   at tryHandleCache (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\ejs\lib\ejs.js:203:34)
   at View.exports.renderFile [as engine] (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\ejs\lib\ejs.js:412:10)
   at View.render (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\express\lib\view.js:126:8)
   at tryRender (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\express\lib\application.js:639:10)
   at EventEmitter.render (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\express\lib\application.js:591:3)
   at ServerResponse.render (C:\Users\Andreas\Documents\GitHub\Quiz\node_modules\express\lib\response.js:960:7)

我做错了什么?

【问题讨论】:

  • Node js 纯粹是异步的,你必须在回调中编写每个结果访问,在你的情况下,数据库访问调用将返回 res ,但你没有使用它作为对象,在那里使用回调跨度>
  • 这对我不起作用,我收到的唯一数据是“未定义”。

标签: html mysql node.js ejs


【解决方案1】:

我至少发现了问题,在获取数据并将其保存到变量后,运行 if 语句后数据消失了。所以我需要弄清楚如何传递变量。

有什么建议吗?

【讨论】:

    【解决方案2】:

    我将查询放在了路由中,虽然不漂亮,但完成了工作!

    app.get('/settings', function(req, res) {
        connection.acquire(function (err, con) {
            con.query('SELECT * FROM user', function (err, rows) {
                con.release();
                if(err) {
                    console.log(err);
                } else {
                    obj = JSON.parse(JSON.stringify(rows));
                    res.render('settings', {
                        obj:obj,
                        title: 'Settings',
                        classname: 'settings'
                    });
                }
            });
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 2016-07-07
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多