我使用快速框架和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()。但是当我回到索引文件时,仍然没有从数据库中获取新数据
答案 0 :(得分:1)
你似乎永远不会更新渲染'/'
时使用的数组var users = [];
var age = [];
使用'select * from users'查询填充一次,但之后永远不会更新。
你可以(为了理解发生了什么)添加
console.log(result);
users.push(user_p.user);
在'插入用户集'的ok分支中?请求。这将显示新用户。
关于'年龄',你不能简单地做同样的事情,因为你有一个'var age'局部变量遮蔽你的'var age'模块范围变量。