【问题标题】:Sending Query Results from MySQL to .ejs将查询结果从 MySQL 发送到 .ejs
【发布时间】:2016-07-23 01:27:06
【问题描述】:

我刚刚开始学习 node.js 并试图从 MySQL 获取查询结果并将它们发送到 ejs 文件。我原来的 app.js 是这样的。

这是我原来的 app.js:

var app = express();
var client = mysql.createConnection({
    user: 'user',
    password: '',
    database: 'DB_practice'
});
app.get('/', function(request, response){
    var result;
    fs.readFile('list.ejs', 'utf8', function(error, data){

        client.query('SELECT * FROM test', function(error, results){
            result = results;
            console.log("Query results(inside): " + JSON.stringify(results));             
        });
        console.log("Query results(outside): " + JSON.stringify(results));
        response.render(__dirname + '/list', {data: result} );

    });
});

但我注意到,在 client.query() 块之外使用 render() 方法并没有按顺序执行代码。 console.log("查询结果(内部):" + JSON.stringify(results));行以数组形式很好地打印结果。但是当我在外面打印时(console.log("Query results(outside): " + JSON.stringify(results));),它返回undefined,这意味着在“outside”之后执行“inside”打印函数打印功能。所以我尝试将 render() 放在查询块中:

app.get('/', function(request, response){
    var result;
    fs.readFile('list.ejs', 'utf8', function(error, data){

        client.query('SELECT * FROM test', function(error, results){
            result = results;
            response.render(__dirname + '/list', {data: results} );
            console.log("Query results(inside): " + JSON.stringify(results));             
        });
        console.log("Query results(outside): " + JSON.stringify(results));


    });
});

抱怨我在 list.ejs 中将查询结果传递给的变量未定义。这是来自 list.ejs 的部分:

    <script type='text/javascript'>
        var row =<%-JSON.stringify(data)%>
    </script>
    <% row.forEach(function(item, index){ %>
    <tr>
        <td><a href="/delete/<%= item.id %>">DELETE</a></td>
        <td><a href="/edit/<%= item.id %>">EDIT</a></td>
        <td><%= item.id %></td>
        <td><%= item.name %></td>
        <td><%= item.phone_no %></td>
    </tr>
    <% }); %>

它表示该行未定义。

我已经为此苦苦挣扎了几天。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript mysql json node.js express


    【解决方案1】:

    只需使用以下代码更新您的list.ejs -

    list.ejs

    <% data.forEach(function(item, index){ %>
    <tr>
        <td><a href="/delete/<%= item.id %>">DELETE</a></td>
        <td><a href="/edit/<%= item.id %>">EDIT</a></td>
        <td><%= item.id %></td>
        <td><%= item.name %></td>
        <td><%= item.phone_no %></td>
    </tr>
    <% }); %>
    

    标签 中的任何内容都将使用未转义的 HTML 数据打印到输出。

    【讨论】:

    • @user3369873,希望这将有助于解决您的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多