有没有办法使用pool.getConnection()mysqljs/mysql lib中的async/ await语法?
我们的想法是有一个方法返回一个连接,该连接可以在释放它之前在具有各种外键约束(顺序查询)的写查询中传递,同时可能从池中获得进一步的连接,以便进行各种读取查询(平行).
注意:此问题主要与节点中的单例对象有关,而不是与数据库池有关
我正在使用 mysqljs 节点模块进行数据库连接构建一个expressjs 应用程序。我想创建一个可以在整个应用程序中重用的单个池对象(对于不同的模型等)。我想知道在整个 Express 应用程序中使用单个对象实例的正确方法是什么
我见过很多例子,人们像这样创建 db.js 文件或 pool.js 文件,并在需要的地方需要它
// db.js
var mysql = require('mysql');
var pool;
module.exports = {
getPool: function () {
if (pool) return pool;
pool = mysql.createPool(dbConfig);
return pool;
}
};
// app.js
var pool = require('pool').getPool();
pool.query('SELECT * FROM users');
Run Code Online (Sandbox Code Playgroud)
但是我觉得这仍然不是正确的方法,因为您每次需要该对象时都依赖 Nodejs 缓存返回相同的实例。如果节点最终加载代码两次,您最终会得到两个池,例如
const poolA = require('./pool').getPool();
const poolB = require('./POOL').getPool(); // resolves to same file but node will not get result from cache
console.log(poolA === poolB); // false
Run Code Online (Sandbox Code Playgroud)
从我读过的大多数内容来看,由于这种行为,通常不建议在节点应用程序中使用单例对象,但这似乎是快速应用程序的常见用例。所以我想知道人们如何在应用程序的生命周期中创建他们的单一池?
注意:我目前正在做的是在应用程序根目录中实例化池,然后将该实例作为构造函数参数传递,但我也不喜欢这样做
我正在使用 mysql-node: https: //github.com/mysqljs/mysqlMysql.Escape()但我对默认清理、 vs和vsMysql.EscapeId()的使用有点困惑。文档说????
默认清理
当您将对象传递给 .escape() 或 .query() 时,.escapeId() 用于避免对象键中的 SQL 注入。
我看到术语“对象”,那么这是否意味着我仍然应该转义这样的查询?
UPDATE table SET updated_at = userInput WHERE name = userInput。
Mysql.Escape() 与 Mysql.EscapeId()
这两个函数有什么区别。文档说 mysql.escape 使用 mysql.escapeId。我知道它们都会清理输入,但是是否存在使用其中之一的情况?
?与??
文档中?和??可以互换使用。它们的意思是一样的吗?
body 对象中的属性数量根据值的不同而不同user_type。
如果user_type是job_seeker,则正文对象具有以下属性 --> 用户名、用户类型、姓名、电子邮件、密码、简历、简历日期时间、薪水期望。我已经创建了这样的硬编码插入语句 -->
insert into users (username, user_type, name, email, password, resume, resume_date_time, salary_expectation) values (?, ?, ?, ?, ?, ?, ?, ?);
如果user_type是雇主,则主体对象具有以下属性 --> 用户名、用户类型、姓名、电子邮件、密码、公司名称、公司个人资料。本例的插入语句是这样的 -->
insert into users (username, user_type, name, email, password, company_name, company_profile) values (?, ?, ?, ?, ?, ?, ?);
那么,如何根据不同的编号创建动态插入查询。POST 请求正文中的属性?