asynchronous调用Node.JS上的mySql
所以,我试图在我的node.js项目asynchronousgetConnection和查询,因为我想只在我的查询后,我的回应。 这是代码,
router.post('/', function(req, res, next){ var queryRows; con.getConnection(function(error, connection){ if(error){ }else{ connection.query('SELECT * FROM Tablee', function(error, rows, fields){ queryRows = rows; }); } }); res.render('home', {data:queryRows}); }
我想首先运行getConenction()和代码; 然后渲染。
我遵循了这个问题的确切解决scheme,但徒劳无功。 连接本身是不确定的; 所以查询返回错误。
我正在使用节点版本8来支持asynchronous和等待; 但是我无法得到结果。
mysql
不支持承诺,这是能够使用async/await
。
而不是使用util.promisify
或类似的东西包装它,你可以考虑迁移你的代码到mysql2
,它支持开箱即用的承诺: https : //github.com/sidorares/node-mysql2#using-promise-wrapper
由于mysql2
试图提供与mysql
相同的API,代码更改应该是最小的。
编辑 :一些(未经testing)示例代码:
// Install an Express middleware that will set up the database connection, if required. // Call this somewhere "high up" in your Express app, before route declarations. app.use(async (req, res, next) => { if (! app.db) { const mysql = require('mysql2/promise'); app.db = await mysql.createConnection({ ... }); // instead of .createConnection, you can also use .createPool } req.db = app.db; return next(); });
然后在你的路线:
router.post('/', async function(req, res) { let [ queryRows, queryFields ] = await req.db.query('SELECT * FROM Tablee'); res.render('home', { data : queryRows }); }
(为了简洁,我忽略了所有的error handling,但是确保你添加了它)
- 在下面的控制stream中使用响应之前,如何等待节点/快速应用程序中mongo findOne查询的响应
- 节点js中的嵌套asynchronousmongoDB调用
- 在Nodejs中堆叠asynchronouscallback事件的最佳方法
- 什么函数应该是asynchronous的(放在Node.js中)?
- asynchronous系列nodejs中的asynchronousforeach
- 在node.js(node-orm)中链接模型关系,就像在Rails中一样
- Node.js:你如何处理循环中的callback?
- 如何在第一次失败后停止async.queue?
- node.js:asynchronouscallback值