mysql - Nodejs用MYSQL问题查询外接方法
问题描述
我做了一个连接到mysql服务器的函数,它工作正常。现在我做了其他功能来查询,但我不能这样做。我在我的 app.js 中调用了这个函数
进口:
const mysql = require("mysql");
const config = require("../configuration/config");
const connectToDB = () => {
const connection = mysql.createConnection(config.database);
connection.connect(err => {
if (err) return console.log(err);
});
console.log("MYSQL DB CONNECTED");
};
然后我做这个功能
const getAllUserReports = userID => {
return new Promise((resolve, reject) => {
const reports = mysql.query(
`SELECT reports.id,report_types.[type],companies.id as companyID,reports.[year]
FROM reports
INNER JOIN report_types on reports.reportTypeID=report_types.id
INNER JOIN companies on reports.companyID=companies.id
where reports.creatorUserID=${userID} and active_report=1
`
);
resolve(reports);
reject("Server Error");
});
};
我在我的路线中调用第二个函数,但“mysql.query”不起作用。在 sql server 中它的工作是这样的。
还有其他方法可以吗??我不想在一次查询后连接,我想在服务器开启时连接。
解决方案
当您使用mysql npm 包时,您无法从mysql
对象运行查询。connection
您必须改为从对象运行它。你必须说
const reports = connection.query(/*whatever*/, function(error, results, fields) {
/*handle query results*/
})
或承诺的等价物。否则 mysql 包不知道要使用哪个连接。
而且,相对而言,如果您的服务器持续运行任何时间,您只打开一次连接并重用它的策略注定会失败;如果连接断开,您的服务器将无法继续。
使用连接池。然后为您必须运行的每个查询从池中获取一个连接。这将连接管理置于健壮且经过调试的代码中。而且,您还将获得并发异步查询。
像这样的东西(我没有调试过)可能会起作用。
const mysql = require("mysql");
const config = require("../configuration/config");
const pool mysql.createPool(config.databaseConnectionPool);
...
let resultset;
pool.query (/*whatever*/, function (error, result, fields) {
if (error) throw error;
resultset = results;
});
推荐阅读
- python - 如何获取数组烧瓶中的元素
- list - Haskell 将不同索引处的 2 个列表的元素组合在一起
- python - 有没有办法使用 xlsxwriter 向图表添加超过 2 个系列?
- python - 从字符串创建图表
- arrays - Rails ActiveRecord Select 与数组比较
- javascript - 从 Django 项目中的 Js 创建的 views.py 访问 pdf 文件
- java - 杰克逊序列化简单的一个属性 ValueObject 像枚举 - 没有嵌套
- java - MongoDB 删除第三级嵌入文档
- c# - 如何在 Blazor 中运行 jsx?
- javascript - 如何填充猫鼬中的特定字段