gpt4 book ai didi

javascript - 插入nodejs后MySql更新

转载 作者:行者123 更新时间:2023-11-29 11:56:19 25 4
gpt4 key购买 nike

我用express框架和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>

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

附注我刚刚看到我的控制台出现以下错误:

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

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

最佳答案

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

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

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

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

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

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

关于“年龄”,您不能简单地做同样的事情,因为您有一个“var Age”局部变量隐藏了“var Age”模块作用域变量。

关于javascript - 插入nodejs后MySql更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33145545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com