在控制器中我对config/db
做了一个要求,但是我需要发送一个带有数据库名称的参数,因为我可以有几个数据库。
所以在控制器中我这样做:
"use strict";
var connection = require('../config/db', function(db)
{
var db = "Emp1";
});
var connection = require('../config/db');
var mssql = require('mssql');
var request = new mssql.Request(connection);
var parser = require('json-parser');
var squel = require("squel");
class RecpetionController
{
init(app)
{
app.get("/", (req, res) => this.index.call(this, req, res));
}
index(req, res)
{
console.log('Index reception')
}
}
module.exports = RecpetionController;
在config/db
我有这个:
var mssql = require("mssql");
console.log('DATABASE');
if(db == 'Emp1')
{
var config =
{
user: "user",
password: "pass",
server: "ip",
database: "Emp1"
}
}
else if(db == 'Emp2')
{
var config =
{
user: "user",
password: "pass",
server: "ip",
database: "Emp2"
}
}
var connection = new mssql.Connection(config);
connection.connect(function(err)
{
console.log(err);
});
module.exports = connection;
所以我以正确的方式传递控制器的值?
如何在config/db
中收到价值?
如果在config/db
我console.log(arguments)
,它没有向我显示任何具有db值的字段......
我该如何解决这个问题。
使用node-cache
获取config/db
中的数据库名称的更好方法是什么?
谢谢
答案 0 :(得分:1)
你做不到。因此,您使 ValueError: could not convert string to float: '2015-37'
返回工厂进行连接,而不是连接。旧式的Node回调方式看起来像这样(这是概念,并不意味着完美):
config/db
...然后像这样使用它:
var mssql = require("mssql");
module.exports = function getConnection(db, callback) {
if (db == 'Emp1') {
var config = {
user: "user",
password: "pass",
server: "ip",
database: "Emp1"
}
}
else if (db == 'Emp2') {
var config = {
user: "user",
password: "pass",
server: "ip",
database: "Emp2"
}
}
var connection = new mssql.Connection(config);
connection.connect(function(err) {
callback(err, connection);
});
};
或者您可以将var connection = require('../config/db')('Emp1', function(err, connection) {
// Use `err` and `connection` here
});
调用中的连接分开,并让使用该连接的模块执行connect
。有很多方法可以解决它。
更现代的API会使用Promises(为了他们自己,并允许使用connect
/ async
):
await
然后
var mssql = require("mssql");
module.exports = function getConnection(db, callback) {
return new Promise(function(resolve, reject) {
if (db == 'Emp1') {
var config = {
user: "user",
password: "pass",
server: "ip",
database: "Emp1"
}
}
else if (db == 'Emp2') {
var config = {
user: "user",
password: "pass",
server: "ip",
database: "Emp2"
}
}
var connection = new mssql.Connection(config);
connection.connect(function(err) {
if (err) {
reject(err);
} else {
resolve(connection);
}
});
});
};
在上面我已经使用了ES5语法(如果您使用的是旧版本的Node,Promises可以由模块提供),因为您的代码目前似乎避免使用ES2015 +功能。
最后:我建议您更改配置选择以使用对象或require('../config/db')('Emp1')
.then(function(connection) {
// Use `connection` here
})
.catch(function(err) {
// Use `err` here
});
:
Map
然后
var configs = {
Emp1: {
user: "user",
password: "pass",
server: "ip",
database: "Emp1"
},
Emp2: {
user: "user",
password: "pass",
server: "ip",
database: "Emp2"
}
};
甚至可能从文件中加载它们......