将 mysql 连接作为参数传递给表达式路由中间件函数
Passing a mysql connection to expression routing middleware function as argument
我想知道是否可以将连接的数据库实例作为参数传递给快速中间件。
例如:
// in app.js
const mysql = require('mysql');
const mysqlCon = mysql.createConnection({
// some configurations...
})
mysqlCon.connect((err)=> if(err) throw err);
然后在一个单独的文件中...
// in a separate file called: login handler
const loginHandler = (req, res, dbCon) => {
// query database and stuff...
}
module.exports = loginHanlder;
然后返回 app.js 将已建立的 mysql 连接传递给中间件处理程序
// back in app.js
// a route
const loginHandler = require('./handlers/loginHanlder.js');
app.get('/login', loginHanlder(req, res, mysqlCon));
这行得通吗?或者是否有传统上更好的方法来实现这个目标?
您尝试这样做的方式是行不通的,因为 req,res
将是未定义的。
但是,您可以创建一个将连接作为参数并返回 route-handler 函数的工厂函数。由于将返回的函数是一个闭包,因此它将可以访问父作用域中的 db-connection 。类似于:
function getRequestHandler(dbConn) {
return function (req, res, next) {
// use dbConn here to do stuff
}
}
你可以这样使用它:
const dbConn = initConnection(); // connect to your db here and return the connection instance
app.get('/login', getRequestHandler(dbConn));
或者,如果您不want/need创建自己的工厂函数,您可以简单地执行以下操作:
app.get('/login', (req, res) => loginHandler(req, res, mysqlCon));
我想知道是否可以将连接的数据库实例作为参数传递给快速中间件。
例如:
// in app.js
const mysql = require('mysql');
const mysqlCon = mysql.createConnection({
// some configurations...
})
mysqlCon.connect((err)=> if(err) throw err);
然后在一个单独的文件中...
// in a separate file called: login handler
const loginHandler = (req, res, dbCon) => {
// query database and stuff...
}
module.exports = loginHanlder;
然后返回 app.js 将已建立的 mysql 连接传递给中间件处理程序
// back in app.js
// a route
const loginHandler = require('./handlers/loginHanlder.js');
app.get('/login', loginHanlder(req, res, mysqlCon));
这行得通吗?或者是否有传统上更好的方法来实现这个目标?
您尝试这样做的方式是行不通的,因为 req,res
将是未定义的。
但是,您可以创建一个将连接作为参数并返回 route-handler 函数的工厂函数。由于将返回的函数是一个闭包,因此它将可以访问父作用域中的 db-connection 。类似于:
function getRequestHandler(dbConn) {
return function (req, res, next) {
// use dbConn here to do stuff
}
}
你可以这样使用它:
const dbConn = initConnection(); // connect to your db here and return the connection instance
app.get('/login', getRequestHandler(dbConn));
或者,如果您不want/need创建自己的工厂函数,您可以简单地执行以下操作:
app.get('/login', (req, res) => loginHandler(req, res, mysqlCon));