Javascript 将查询结果从MySQL发送到.ejs

Javascript 将查询结果从MySQL发送到.ejs,javascript,mysql,json,node.js,express,Javascript,Mysql,Json,Node.js,Express,我刚刚开始学习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 re

我刚刚开始学习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()方法并没有按顺序执行代码。log(“查询结果(内部):”+JSON.stringify(结果));line以数组形式精细地打印结果。但是当我在外部(console.log(“queryresults(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>
    <% }); %>

var行=
它说行是未定义的


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

只需使用以下代码更新您的
列表。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,希望这将有助于解决您的问题。