如何使用mysql连接与无服务器framework.connection应该在我的组件函数中可用,而不是每次在组件函数中创建mysql连接
像这样试过
var mysql = require('mysql');
module.exports.respond = function(event, cb) {
var pool = mysql.createPool({
connectionLimit : 100,
host : 'hostname',
user : 'username',
password : 'password',
database : 'databasename',
debug : false
});
var message='';
pool.getConnection(function(err,connection){
if(err) {
message='Could not connect to database';
} else {
message="Database is connected";
}
var response = {
message: message
};
return cb(null, response);
});
};
但是上面的代码只能用于当前的功能,想在无服务器框架中为mysql连接做一些常见的事情,在无服务器框架中找不到关于如何使用mysql的正确文件
答案 0 :(得分:1)
我正在回答我自己的问题
在database.js
文件夹
component/lib
个文件
database.js的代码
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'hostname',
user : 'username',
password : 'password',
database : 'databasename'
});
connection.connect();
module.exports = connection;
在component/lib/index.js
文件
var connection = require("../lib/database.js");
可以使用连接变量在component/lib/index.js
module.exports.respond = function(event, cb) {
var query="SELECT * from table_name";
connection.query(query,function(err,rows) {
})
};
答案 1 :(得分:0)
我相信您在基于无服务器框架的项目中创建了一个包含多个lambda函数的组件。现在你想编写MySQL连接代码,以便这个代码块可以在该组件的所有lambda函数中重用。
如果这是ask,那么Serverless确实在Component目录中提供了一个"lib"文件夹,您可以利用该文件夹编写要重用的公共代码逻辑。由于您的组件具有基于NodeJS的运行时,因此应该有一个" index.js"组件文件夹中的文件 -
your_serverless_project_directory/component_name/lib/index.js
您要做的第一件事是将MySQL连接代码逻辑添加到index.js中的函数/方法。
无服务器应该已经在你的所有lambda函数的handler.js代码中包含了这个完整的lib /文件夹 -
var lib = require('../../lib');
因此,您要做的下一个/最后一件事是重新使用您的连接函数/方法(在Component中的所有lambda函数中),如下所示 -
module.exports.handler = function(event, context) {
lib.mySQLConnection();
};
希望这会有所帮助,让我知道它是怎么回事。
答案 2 :(得分:0)
建立正常的Goswami的答案:
您已在此处指定了数据库。我的lambda每个都需要不同的数据库,因此在连接代码中只需要离开数据库:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'hostname',
user : 'username',
password : 'password'
// no database here
});
connection.connect();
module.exports = connection;
然后使用奇怪命名的函数来更改每个lambda函数中的数据库:
connection.changeUser({database: database}, function(err) {
if (err) { throw err; }
});
connection.query(sql, function(err, rows, fields) {
// etc
}
您还可以考虑使用database connection pool。
答案 3 :(得分:0)
你必须在功能上建立连接,因为我们正在使用mongodb 我们正在将lambda函数中的mongodb连接起来。
来自https://github.com/malikasinger1/serverles-practice/tree/master/mongodb-connection的代码段:
public func above<T>(_ : T.Type)->(T)
在你的脸上,它最有可能是这样的:
var mongoose = require("mongoose");
var dbURI = 'mongodb://localhost/mydatabase';
mongoose.connect(dbURI);
mongoose.connection.on('connected', function () {//connected
console.log("Mongoose is connected");
// process.exit(1);
});
module.exports.signup = (event, context, cb) => {
//doing signup here
}
答案 4 :(得分:0)
我假设您正在AWS上使用无服务器框架。
尽管您可以创建连接并将其分配给 frozen 变量,但不能保证您的lambda不会创建新的连接。原因如下: 到目前为止(以我个人观点),最好的方法是为与数据库相关的操作创建一个单独的lambda函数,并通过其他lambda调用此函数。这是流程:
客户端-> registerUserLambda-> dbLambda->数据库
但是,关于lambda的问题是,当请求过多时,将创建新的容器来处理其他请求。即,将创建新的连接。因此,连接池的概念目前在无服务器Lambda上无法很好地发挥作用。