Добавлен модуль управления CORS-заголовками, обновлена версия LODASH
This commit is contained in:
parent
506cce697b
commit
7c8cca6084
@ -10,6 +10,7 @@
|
||||
const _ = require("lodash"); //Работа с массивами и коллекциями
|
||||
const EventEmitter = require("events"); //Обработчик пользовательских событий
|
||||
const express = require("express"); //WEB-сервер Express
|
||||
const cors = require("cors"); //Управление заголовками безопасности для WEB-сервера Express
|
||||
const bodyParser = require("body-parser"); //Модуль для Express (разбор тела входящего запроса)
|
||||
const { ServerError } = require("./server_errors"); //Типовая ошибка
|
||||
const {
|
||||
@ -71,6 +72,8 @@ class InQueue extends EventEmitter {
|
||||
this.notifier = prms.notifier;
|
||||
//WEB-приложение
|
||||
this.webApp = express();
|
||||
this.webApp.use(cors());
|
||||
this.webApp.options("*", cors());
|
||||
//WEB-сервер
|
||||
this.srv = null;
|
||||
} else {
|
||||
@ -309,9 +312,7 @@ class InQueue extends EventEmitter {
|
||||
await this.logger.info(`Входящее сообщение ${q.nId} успешно отработано`, { nQueueId: q.nId });
|
||||
} catch (e) {
|
||||
//Тема и текст уведомления об ошибке
|
||||
let sSubject = `Ошибка обработки входящего сообщения сервером приложений для функции "${
|
||||
prms.function.sCode
|
||||
}" сервиса "${prms.service.sCode}"`;
|
||||
let sSubject = `Ошибка обработки входящего сообщения сервером приложений для функции "${prms.function.sCode}" сервиса "${prms.service.sCode}"`;
|
||||
let sMessage = makeErrorText(e);
|
||||
//Если сообщение очереди успели создать
|
||||
if (q) {
|
||||
@ -328,9 +329,7 @@ class InQueue extends EventEmitter {
|
||||
{ nQueueId: q.nId }
|
||||
);
|
||||
//Добавим чуть больше информации в тему сообщения
|
||||
sSubject = `Ошибка обработки входящего сообщения ${q.nId} сервером приложений для функции "${
|
||||
prms.function.sCode
|
||||
}" сервиса "${prms.service.sCode}"`;
|
||||
sSubject = `Ошибка обработки входящего сообщения ${q.nId} сервером приложений для функции "${prms.function.sCode}" сервиса "${prms.service.sCode}"`;
|
||||
} else {
|
||||
//Ограничимся общей ошибкой
|
||||
await this.logger.error(sMessage, {
|
||||
@ -375,52 +374,56 @@ class InQueue extends EventEmitter {
|
||||
//Для любых запросов к корневому адресу сервиса - ответ о том, что это за сервис, и что он работает
|
||||
this.webApp.all(srvs.sSrvRoot, (req, res) => {
|
||||
res.status(200).send(
|
||||
`<html><body><center><br><h1>Сервер приложений ПП Парус 8</h1><h3>Сервис: ${
|
||||
srvs.sName
|
||||
}</h3></center></body></html>`
|
||||
`<html><body><center><br><h1>Сервер приложений ПП Парус 8</h1><h3>Сервис: ${srvs.sName}</h3></center></body></html>`
|
||||
);
|
||||
});
|
||||
//Для всех статических функций сервиса...
|
||||
_.forEach(_.filter(srvs.functions, fn => fn.sFnURL.startsWith("@")), fn => {
|
||||
this.webApp.use(
|
||||
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL.substr(1) }),
|
||||
express.static(`${this.inComing.sStaticDir}/${fn.sFnURL.substr(1)}`)
|
||||
);
|
||||
});
|
||||
_.forEach(
|
||||
_.filter(srvs.functions, fn => fn.sFnURL.startsWith("@")),
|
||||
fn => {
|
||||
this.webApp.use(
|
||||
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL.substr(1) }),
|
||||
express.static(`${this.inComing.sStaticDir}/${fn.sFnURL.substr(1)}`)
|
||||
);
|
||||
}
|
||||
);
|
||||
//Для всех функций сервиса (кроме статических)...
|
||||
_.forEach(_.filter(srvs.functions, fn => !fn.sFnURL.startsWith("@")), fn => {
|
||||
//...собственный обработчик, в зависимости от указанного способа передачи параметров
|
||||
this.webApp[fn.nFnPrmsType == objServiceFnSchema.NFN_PRMS_TYPE_POST ? "post" : "get"](
|
||||
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
|
||||
async (req, res) => {
|
||||
try {
|
||||
//Вызываем обработчик
|
||||
await this.processMessage({ req, res, service: srvs, function: fn });
|
||||
} catch (e) {
|
||||
_.forEach(
|
||||
_.filter(srvs.functions, fn => !fn.sFnURL.startsWith("@")),
|
||||
fn => {
|
||||
//...собственный обработчик, в зависимости от указанного способа передачи параметров
|
||||
this.webApp[fn.nFnPrmsType == objServiceFnSchema.NFN_PRMS_TYPE_POST ? "post" : "get"](
|
||||
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
|
||||
async (req, res) => {
|
||||
try {
|
||||
//Вызываем обработчик
|
||||
await this.processMessage({ req, res, service: srvs, function: fn });
|
||||
} catch (e) {
|
||||
//Протоколируем в журнал работы сервера
|
||||
await this.logger.error(makeErrorText(e), {
|
||||
nServiceId: srvs.nId,
|
||||
nServiceFnId: fn.nId
|
||||
});
|
||||
//Отправим ошибку клиенту
|
||||
res.status(500).send(makeErrorText(e));
|
||||
}
|
||||
}
|
||||
);
|
||||
//...и собственный обработчик ошибок
|
||||
this.webApp.use(
|
||||
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
|
||||
async (err, req, res, next) => {
|
||||
//Протоколируем в журнал работы сервера
|
||||
await this.logger.error(makeErrorText(e), {
|
||||
await this.logger.error(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)), {
|
||||
nServiceId: srvs.nId,
|
||||
nServiceFnId: fn.nId
|
||||
});
|
||||
//Отправим ошибку клиенту
|
||||
res.status(500).send(makeErrorText(e));
|
||||
res.status(500).send(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)));
|
||||
}
|
||||
}
|
||||
);
|
||||
//...и собственный обработчик ошибок
|
||||
this.webApp.use(
|
||||
buildURL({ sSrvRoot: srvs.sSrvRoot, sFnURL: fn.sFnURL }),
|
||||
async (err, req, res, next) => {
|
||||
//Протоколируем в журнал работы сервера
|
||||
await this.logger.error(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)), {
|
||||
nServiceId: srvs.nId,
|
||||
nServiceFnId: fn.nId
|
||||
});
|
||||
//Отправим ошибку клиенту
|
||||
res.status(500).send(makeErrorText(new ServerError(SERR_WEB_SERVER, err.message)));
|
||||
}
|
||||
);
|
||||
});
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
//Запросы на адреса, не входящие в состав объявленных сервисов - 404 NOT FOUND
|
||||
this.webApp.use("*", (req, res) => {
|
||||
|
20
package-lock.json
generated
20
package-lock.json
generated
@ -135,6 +135,15 @@
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"cors": {
|
||||
"version": "2.8.5",
|
||||
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
||||
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
||||
"requires": {
|
||||
"object-assign": "^4",
|
||||
"vary": "^1"
|
||||
}
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
@ -407,9 +416,9 @@
|
||||
}
|
||||
},
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
|
||||
"version": "4.17.15",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
|
||||
},
|
||||
"media-typer": {
|
||||
"version": "0.3.0",
|
||||
@ -469,6 +478,11 @@
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||
},
|
||||
"on-finished": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
||||
|
@ -19,9 +19,10 @@
|
||||
"homepage": "https://github.com/CITKParus/ExchangeService#readme",
|
||||
"dependencies": {
|
||||
"body-parser": "^1.18.3",
|
||||
"cors": "^2.8.5",
|
||||
"express": "^4.16.4",
|
||||
"js2xmlparser": "^3.0.0",
|
||||
"lodash": "^4.17.11",
|
||||
"lodash": "^4.17.15",
|
||||
"module-alias": "^2.1.0",
|
||||
"nodemailer": "^4.7.0",
|
||||
"oracledb": "^2.3.0",
|
||||
|
Loading…
x
Reference in New Issue
Block a user