【问题标题】:MySql update after inserting nodejs插入nodejs后MySql更新
【发布时间】:2016-01-13 17:38:07
【问题描述】:

我在 nodejs 中使用 express 框架和 ejs 模板制作了一个简单的应用程序,我可以在其中插入 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>

插入和刷新后如何“实时”查看数据库中的更改?

附: 我刚刚看到我的控制台中有以下错误:

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

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

【问题讨论】:

    标签: javascript mysql node.js express ejs


    【解决方案1】:

    您似乎从未更新渲染“/”时使用的数组

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

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

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

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

    在“插入用户集?”的 ok 分支中要求。这将显示新用户。

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

    【讨论】:

    • 是的,我已经成功了,但是我如何始终更新从数据库中获取的数据?它应该一次又一次地推送所有数据,为什么每次刷新页面时不调用“SELECT * from users”?还是有?\
    • no 每次刷新页面时,当前都不会调用“select *”。它仅在服务器启动时启动。你当然可以这样做(至少在你的用户列表很小的时候)
    • @JeromeWAGNER 嗨...我和操作员一样...每次刷新页面时如何调用 select ?谢谢!
    • @AlphaMirage 好吧,您可以在“/”路由中调用 select 并在回调中调用 res.render 并使用查询结果。希望这会有所帮助。
    猜你喜欢
    • 2020-10-25
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多