javascript - 将异步与 NodeJs MySQL 驱动程序一起使用
问题描述
我想将该功能改造成router.get('/', etc)
使用async和await的功能。并且正在制造麻烦res.send
,connection.query
我不知道如何使用 async/await 构造来处理它们。
我尝试使用此功能:
const awaitHandlerFactory = (middleware) => {
return async (req, res, next) => {
try {
await middleware(req, res, next)
} catch (err) {
next(err)
}
}
};
这是我在文件中的代码:
var express = require('express');
// const data = require("../data/repo");
var router = express.Router();
let mysql = require("mysql");
let config = require('../config/config.json');
let connection = mysql.createConnection(config);
connection.connect();
//
let guests = {};
let query1 = "select * from guests";
//GET home page.
router.get('/', function(req, res, next) {
connection.query(query1, function (err, rows) {
guests['guests'] = rows;
res.send(guests)
});
});
此功能适用于router.get('/', etc...)
我明白了:这就是我想要的。
"guests": [
{
"event_id": 1,
"guest_id": 1,
"firstName": "lkasjdl;skj",
"lastName": "lskajdfal;skdj",
"role": "lsakdjfalskdjflks;adjf",
"created_at": null,
"updated_at": null
},
解决方案
您需要将回调样式的 connection.query 转换为可以等待的内容。promisify
fromutil
将做到这一点。
const express = require('express');
// const data = require("../data/repo");
const router = express.Router();
const util = require("util");
const mysql = require("mysql");
const config = require('../config/config.json');
const connection = mysql.createConnection(config);
const query = util.promisify(connection.query.bind(connection));
connection.connect();
const guests = {};
const query1 = "select * from guests";
//GET home page.
router.get('/', async function(req, res, next) {
try {
const rows = await query(query1);
} catch(ex) {
//process your error
}
guests['guests'] = rows;
res.send(guests);
});
推荐阅读
- java - 如何使用 Maven 将依赖文件、放入目标中包含到 Java 代码中?
- python - 如何在 Python 中编写具有 sudo 权限的文件?
- ios - UITableViewCell 的委托不起作用
- assembly - 在汇编中将输出作为字符而不是数字
- jsf - InputText 字段在 Chrome 中的 Primefaces 数据表中没有获得焦点
- python - 在 Pycharm 的 Python 控制台中移动变量窗格
- c# - FitSharp 无法在其他文件夹中找到 .DLL
- ruby - 仅针对特定模型覆盖 ActiveRecord::Relation::CollectionProxy
- html - 不能在 django 模板中使用多个引导模式
- powerpoint - 将 aws 图标添加到 powerpoint 库