4

I'm trying to get the data of my MySQL table and print them in HTML using EJS, but this doesn't work. It tells me print not defined. What should I do?

router.get('/data', function(req, res){
    res.render('print', {req : req, res : res});
    connection.query('SELECT * FROM users', function(err, result) {

        if(err){
            throw err;
        } else {
            for(x in result){
                res.locals.print =  result[x];
                console.log(result[x]);
            }
        }
    });
});
<!doctype html>
<html>
    <body>
        <div>
            <%= print %>
        </div>
    </body>
</html>

1 Answer 1

7

In the render, you can return a JSON variable with the consulted data and show in the view. res.render can be the last instruction in this way. Some like this:

var obj = {};
router.get('/data', function(req, res){

    connection.query('SELECT * FROM users', function(err, result) {

        if(err){
            throw err;
        } else {
            obj = {print: result};
            res.render('print', obj);                
        }
    });

});

<body>
    <table id="table" >  
        <thead>  
            <tr>  
                <th>Username</th>  
                <th>Password</th>  
            </tr>  
        </thead>  
         <tbody>  
         <% print.forEach(function (user) { %>
            <tr>  
                <td><%= user.username %></td>  
                <td><%= user.password %></td>
            </tr>                                   
         <% }) %>
         </tbody>
    </table>   
</body>

</html>
Sign up to request clarification or add additional context in comments.

10 Comments

I can't name a variable return, so I just named it obj and changed the other "return" 's necessary but left most of the code as is, but it still tells me "print is not defined". Do I maybe need to loop the result argument in the connection query? Weird thing I already did but maybe I did it in the wrong way or something.
I updated the answer. After the res.render('print', obj); add console.log(obj); for show the value of the consulting. After post here the result...
Ahh, you don't need the loop the result, this way works.
Ok, so I think we're getting somewhere. I added the console.log() and it prints out: { print: [ {username: 'Tony', password: 'Lee'}, {username: 'Mark', password: 'Douglas'}, {username: 'Marshall', password: 'Hamilton'} ], _locals() }
I updated the answer, see <%= print[0].username %>.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.