我有一个Web服务器,该服务器接收XML文件并将其存储在SQL Server数据库中。
我正在使用multer中间件来获取文件和MSSQL包以将XML内容保存到数据库中。
我希望每个用户能够一次发送多个文件(一次发送多个文件,例如1000个或更多)。
问题在于,当一个用户发送文件时,它将消耗mssql配置中指定的所有池,如果另一个用户发送了更多文件,它将不得不等到第一个用户完成所有文件的发送。
我希望在所有发送文件的用户之间共享池,以避免饥饿,以便他们可以同时发送文件。
我的mssql配置看起来像这样:
{
"user": "username",
"password": "xxxxxx",
"database": "database_name",
"server": "host.host",
"dialect": "mssql",
"encrypt": true,
"dialectOptions": {
"encrypt": true
},
"pool": {
"max": 5,
"min": 0,
"idle": 10000,
"acquire": 40000,
}
}
我的mssql连接文件:
const mssql = require('mssql');
const pool = new mssql.ConnectionPool(require('config'));
pool.connect(err => {if (err) throw err});
module.exports = pool;
我的控制器文件:
const fs = require('fs');
const async = require('async');
const mssql = require('@mssql');
exports.recive_xml_files = async (req, res) => {
const files = req.files;
const empresa = req.body.empresa;
let cnpj = empresa.split(':')[1];
async.each(files, (file, callback) => {
saveXmlDb(file, cnpj).then(() => {
callback();
});
}, (err) => {
let status = 200;
if (err) status = 500;
res.sendStatus(status);
});
};
const saveXmlDb = (file, cnpj) => {
return new Promise((resolve, reject) => {
fs.readFile(file.path, (err, data) => {
if (err) reject("Não foi possível ler o arquivo XML.");
let sXml = data.toString();
mssql.query(`INSERT into Arquivos_XML (Conteudo, Origem_Id) VALUES ('${sXml}', 6)`).then(res => {
console.log('SAAVING FOR THE FOLLOWING CNPJ------------>', cnpj);
resolve();
}).catch(err => {
reject();
});
});
});
}
有人可以帮助我实现这一目标吗?
谢谢。