Я строю остальные API с NodeJS.Он использует модули cluster, express, body-parser, mssql.Решение работает нормально, но иногда результатом является ошибка sql: сервер закрыл соединение.
Кто-нибудь знает решение.Я читал об обещании mssql модуля обещания, но как мне это реализовать, и является ли это хорошим решением.
Когда сервер базы данных выдает ошибку: Сервер закрыл соединение, я хочу автоматическую повторную попытку (Открыть соединение с БД SQL и выполнить запрос).
var cluster = require('cluster');
if (cluster.isMaster) {
var cpuCount = require('os').cpus().length;
for (var i = 0; i < cpuCount; i += 1) {
cluster.fork();
}
cluster.on('exit', function (worker) {
// Replace the dead worker, we're not sentimental
console.log('Worker %d died:', worker.id);
cluster.fork();
});
} else {
var express = require("express");
var bodyParser = require("body-parser");
var sql = require("mssql");
var app = express();
app.use(bodyParser.json());
app.use(function (req, res, next) {
//Enabling CORS
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, contentType,Content-Type, Accept, Authorization");
next();
});
var server = app.listen(process.env.PORT || 8000, function () {
var port = server.address().port;
console.log("App now running on port", port);
});
var dbConfig = {
user: "<USER>",
password: "<PASSWORD>",
server: "<SERVER>",
database: "<DB>",
connectionTimeout: 999999999,
requestTimeout: 999999999,
pool: {
max: 20,
min: 10,
idleTimeoutMillis: 30000
},
options: {
encrypt: true
}
};
var executeQuery = function(res, query){
sql.connect(dbConfig, function (err, connection) {
if (err) {
console.log("Error while connecting database :- " + err);
res.send(err);
res.end();
}
else {
var request = new sql.Request(connection);
request.query(query, function (err, rs) {
if (err) {
console.log("Error while querying database :- " + err);
res.send(err);
res.end();
}
else {
console.log("Result :- " + rs);
res.send(rs);
res.end();
}
});
sql.close();
}
});
}
app.post("/ic/events/add", function(req , res){
var query = "INSERT INTO EVENT VALUES ('FILE')";
executeQuery (res, query);
});
app.post("/ic/process/to", function(req , res){
var query = "SELECT TOP 1 FROM EVENT WHERE STATUS = 0";
executeQuery (res, query);
});
}
С уважением,
Mark