插入nodejs后更新MySql

时间:2015-10-15 10:02:42

标签: javascript mysql node.js express ejs

我使用快速框架和ejs模板在nodejs中创建了一个简单的应用程序,我可以将其插入到mysql数据库中并查看结果,但由于某些原因,当我插入并刷新页面时,新日期未显示,即使它把它放在数据库中。我需要关闭服务器以查看新数据。

我的index.js路由文件如下所示:

var express = require('express');
var mysql = require('mysql');
var router = express.Router();

var users = [];
var age = [];

var connection = mysql.createConnection( {
    host: 'localhost',
    user: 'admin',
    password: 'pass',
    database: 'users'
});

console.log('\nconnecting to database');
connection.connect();

var query = connection.query('select * from users', function(err, result) {
    if(err) {
        console.error(err);
        return;
    } else {
        for(var i = 0; i<result.length; i++)
        {
            users.push(result[i]['user']);
            age.push(result[i]['age']);
        }
    }
});



/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { 
    title: 'Index page',
    users: users,
    age: age
  });
});


/* GET insert page. */
router.post('/insert', function(req, res, next) {
    var user = req.body.user;
    var age = req.body.age;

    var user_p = {
        user: user,
        age: age
    };

    console.log("post received: %s %s", user, age);

    var query = connection.query('insert into users set ?', user_p, function(err, result) {
        if(err) {
            console.error(err);
            return;
        } else {
            console.log(result);
        }
    });

    res.render('insert', { 
        title: 'Insert page',
        user: user_p
    });
});
// I've removed this connection.end() after I saw the error. But still not getting the new data out of the database when I go back to the index file
connection.end();

module.exports = router;

index.ejs:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head><% include partials/template/head.ejs %></head>
    <body>
        <h1><%= title %></h1>
        <p>Welcome to <%= title %></p>

        <ul>
            <% for(var i=0; i<users.length; i++) {%>
                <li>User: <%= users[i] %>, Age: <%= age[i] %></li>
            <% } %>
        </ul>


        <form action="/insert" method="post">
            <input type="text" name="user" placeholder="User"/>
            <input type="text" name="age" placeholder="Age"/>
            <input type="submit" value="send"/>
        </form>


    <% include partials/template/footer.ejs %>
    <% console.log('included footer'); %>
    </body>
</html>

和insert.ejs:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head><% include partials/template/head.ejs %></head>
    <body>
        <h1><%= title %></h1>
        <p>Welcome to <%= title %></p>

    <p>User: <%= user.user %></p>
    <p>Age: <%= user.age %></p>

    <% include partials/template/footer.ejs %>
    <% console.log('included footer'); %>
    </body>
</html>

在插入和刷新后,如何才能看到“实时”数据库中的更改?

P.S。 我刚刚看到我的控制台出现以下错误:

{ [Error: Cannot enqueue Query after invoking quit.] code: 'PROTOCOL_ENQUEUE_AFTER_QUIT', fatal: false }

P.P.S。 我看到错误后删除了这个connection.end()。但是当我回到索引文件时,仍然没有从数据库中获取新数据

1 个答案:

答案 0 :(得分:1)

你似乎永远不会更新渲染'/'

时使用的数组
var users = [];
var age = [];

使用'select * from users'查询填充一次,但之后永远不会更新。

你可以(为了理解发生了什么)添加

console.log(result);
users.push(user_p.user);

在'插入用户集'的ok分支中?请求。这将显示新用户。

关于'年龄',你不能简单地做同样的事情,因为你有一个'var age'局部变量遮蔽你的'var age'模块范围变量。